//0 1 2 3 4 5
//相当于对每个元素分别操作,操作最多的元素操作数量
//二分加检验
//
signed main()
{
int n,m;cin>>n>>m;
vector<int>a(n),b(n);cin>>a;
int l=0,r=m,ans=0;
while(l<=r)
{
int mid=(l+r)>>1;
b[0]=a[0];if(b[0]+mid>=m) b[0]=0;
rpp(i,n-1)
{
b[i]=a[i];
if(b[i]>=b[i-1]&&b[i]+mid>=b[i-1]+m) b[i]=b[i-1];
if(b[i]<b[i-1]&&b[i]+mid>=b[i-1]) b[i]=b[i-1];
}
if(is_sorted(all(b)))
{
ans=mid;
r=mid-1;
}
else l=mid+1;
}
cout<<ans<<endl;
//stop;
return 0;
}
Codeforces Round #562 (Div. 2) C - Increasing by Modulo (二分加检验)
最新推荐文章于 2022-07-13 02:01:45 发布