Codeforces Round #656 (Div. 3) C. Make It Good (贪心,模拟)

-
题意:给你一个数组\(a\),可以删除其前缀,要求操作后得到的数组是"good"的.对于"good":可以从数组的头和尾选择元素移动到新数组,使得所有元素移动后得到的新数组是非递减的.问最少删除前多少个元素满足条件.
-
题解:因为只删除前缀,所以我们可以倒着来看,
感觉自己搞复杂了. 假如数组从最后一位开始倒着递增的话,当我们遇到第一个不满足递增的位置时,只要要求从这个位置开始向左递减即可.
假如数组从最后一位开始倒着递减的话,那它就只能一直递减下去,即遇到的第一个不满足的位置,那就必须要删到这个位置.
-
代码:
int t; int n; int a[N]; int main() { ios::sync_with_stdio(false);cin.tie(0); cin>>t; while(t--){ cin>>n; for(int i=1;i<=n;++i){ cin>>a[i]; } int pos=n; int now=1; for(int i=n;i>=1;--i){ if(a[i]>a[i-1]){ pos=i-1; break; } } for(int i=pos;i>=1;--i){ if(a[i]<a[i-1]){ now=i; break; } } int ans=n; ans=now-1; cout<<ans<<endl; } return 0; }
𝓐𝓬𝓱𝓲𝓮𝓿𝓮𝓶𝓮𝓷𝓽 𝓹𝓻𝓸𝓿𝓲𝓭𝓮𝓼 𝓽𝓱𝓮 𝓸𝓷𝓵𝔂 𝓻𝓮𝓪𝓵
𝓹𝓵𝓮𝓪𝓼𝓾𝓻𝓮 𝓲𝓷 𝓵𝓲𝓯𝓮

浙公网安备 33010602011771号