学军 奇葩的排序

学军 奇葩的排序

 

 

实现思路

 

#include<bits/stdc++.h>
using namespace std;
//符合条件的必然是两个上升序列
//定义数组a存放录入所有的数
//定义数组b存放拆分后第一个上升序列
//定义数组b存放拆分后第二个上升序列
int n,a[100001],b[100001],c[100001];
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    //bIndex记录第一个拆分序列最后的位置
    //bIndex递增可以作为b数组的下标
    int bIndex=0;
    //存放相应的数据到b数组 
    //coding
     
    //cIndex递增可以作为c数组的下标 
    int cIndex=0;
    //4 4 4 4 1
    if(bIndex==n-1){//处理第二个子序列只有1个元素的情况 
        c[++cIndex]=a[bIndex+1];
    }else{
        // coding
 
    }
     
    if(n==1){//特殊情况处理 
        cout<<0;
    }else if(bIndex+cIndex<n){//有非递增元素 
        cout<<-1;
    }else if(bIndex+cIndex==n){//1个或2个递增子序列 
        if(cIndex==0){//只有一个递增子序列情况 
            cout<<0;
        }else{//两个递增子序列情况 
        //第2个递增子序列最后一个元素
        //必须<=第1个递增子序列第1个元素 
            if(c[cIndex]<=b[1]){
                cout<<cIndex;
            }else{
                cout<<-1;
            }
        }
    }
     
}
//4 4 4 4 1
//5 4 4 4 1 1
//3 3 2 1
//3 1 2 3
//4 4 1 2 3

 

 

 

 

 

 

 

 

posted @ 2021-01-04 21:58  new-code  阅读(165)  评论(0)    收藏  举报