对于不在应该在的位置上的一个数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;
}