[BZOJ5347]冒泡排序[思维]

对于不在应该在的位置上的一个数a[i],每轮排序a[i]可以向后走多步,但只能向前一步,所以答案就是$$max {i-a[i]}$$

很恶心的卡常数,如果统计ans再开一个循环的话,需要开O3

关于在循环内统计答案的正确性。。。。不是很懂

#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 3e7+7;
int a[MAXN], n, s, b, c, d, ans;
int main(void) {
    cin >> n >> s >> b >> c >> d;
    for(int i = 1; i <= n; ++i) {
        a[i] = i;
        s = (s * 1ll * b + c) % d;
        swap(a[i], a[s%i+1]);
        ans = max(ans, i-a[i]);
    }
    cout << ans;
    return 0;
}
posted @ 2018-12-28 16:31  QvvQ  阅读(208)  评论(1编辑  收藏  举报