题解:CF2081B Balancing
首先把极长递增段拉出来是显然的,然后考虑设
然后考虑往这个下界构造方案,对于第
如果有奇数个极长段,那么答案可以取到下界。如果有偶数个极长段,那么最后一步只会把一个最长段上移,那么答案就比下界多
考虑用另一种操作优化,观察第 -2 -5 5 2,答案是
记得特判
#include<bits/stdc++.h>
using namespace std;
int T,n,a[200005];
void Main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
int cnt=0,op=0,lx=0,rx=0;
for(int i=1;i<n;i++)
if(a[i]>a[i+1])
cnt++;
for(int i=1;i<n;i++)
if(a[i]>a[i+1])
{
if(!lx)
lx=i;
rx=i+1;
}
if(cnt==1)
{
cout<<"1\n";
return;
}
if(cnt%2==0&&rx-lx-1>a[rx]-a[lx]-1)
op=1;
cout<<(cnt+1)/2+op<<"\n";
}
signed main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>T;
while(T--)Main();
return 0;
}