链接:https://codeforces.com/contest/1169/problem/C

题意:

Toad Zitz has an array of integers, each integer is between a1,a2,…,an.

In one operation Zitz can choose an integer m is fixed for all operations and indices.

Here y.

Zitz wants to make his array non-decreasing with the minimum number of such operations. Find this minimum number of operations.

 思路:

二分,考虑当前步数能否满足条件即可。判断时候,如果ai+1 < ai 则判断能否使ai加到ai+1,如果不行则当前步数不行,如果ai+1 > ai。同样尽量使ai+1 = ai,如果不行并不结束。

代码:

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
const int MAXN = 3e5 + 10;
const int MOD = 1e9 + 7;
int n, m, k, t;
int a[MAXN];

bool Check(int cnt)
{
    int temp = 0;
    for (int i = 1;i <= n;i++)
    {
        if (a[i] < temp)
        {
            int ops = temp-a[i];
            if (ops > cnt)
                return false;
        }
        else if (a[i] > temp)
        {
            int ops = m-a[i]+temp;
            if (ops > cnt)
                temp = a[i];
        }
    }
    return true;
}

int main()
{
    cin >> n >> m;
    for (int i = 1;i <= n;i++)
        cin >> a[i];
    int l = 0, r = m;
    int res = m;
    while (l < r)
    {
        int mid = (l+r)/2;
        if (Check(mid))
        {
            res = min(res, mid);
            r = mid;
        }
        else
            l = mid+1;
    }
    cout << res << endl;

    return 0;
}

  

相关文章: