学军 奇葩的排序
学军 奇葩的排序

实现思路
#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




作者:newcode 更多资源请关注纽扣编程微信公众号

从事机器人比赛、机器人等级考试、少儿scratch编程、信息学奥赛等研究学习

浙公网安备 33010602011771号