洛谷 CF1385C Make It Good

洛谷 CF1385C Make It Good

思路:此题我们可以先从样例入手,观察样例中的好的序列,找到好的序列的规律,绘制成如下的图:

1组数据的好的序列:
在这里插入图片描述
2组数据的好的序列:
在这里插入图片描述
3组数据的好的序列:
在这里插入图片描述
4组数据的好的序列:
在这里插入图片描述

5组数据的好的序列:
在这里插入图片描述

从样例中的以上5幅分析图中,可以看出,好的序列分为几类:
1.数列是有序的(升序降序均可)。
2.呈一个先上升后下降的趋势(类似山峰的形状,或者说也可以有相邻元素出现相等,样例中告诉我们了)。
于是我们可以从后往前扫,打标记,如果当前是降序就打上标记,代表已经不可能再出现升序了,如果出现打上标记并且出现升序了,就退出,然后我们把当前退出的位置-1就是我们要删除的数字前缀了(当然如果序列本身满足也没触碰到退出条件,自然退出,也不用担心出现负数)。
代码

#include<bits/stdc++.h>
using namespace std;
int t,n,a[200001],i;
bool f;
int main(){
    
    
	cin>>t;
	while(t--){
    
    
		f=false;
		cin>>n;
		for(i=1;i<=n;i++)
			cin>>a[i];
		for(i=n;i>0;i--){
    
    
			if(a[i]>a[i-1])
				f=true;
			if(a[i]<a[i-1]&&f){
    
    
				i--;
				break;	
			}
		}
		cout<<i<<endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_52536621/article/details/113868323