トピックリンク:
1294D MEX最大化codeforces
アイデアを:
1.変数維持しながら、私たちは、電流分布の配列レコード番号を必要とするnow
現在の答えを表し;
2.与えられたy
時間は、我々は計算するために必要なcnt * x + y >= now
最小のをcnt
、この時点で計算cnt * x + y
それは新しいものでy
あり、この位置を加算した値1
;
3.ときにnow
値が0よりも大きい位置には、now
下の電流値のみを残し、バック移動させることができるが、残りのに適用されるnow + x
缶;
コード:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 4e5 + 5;
int q, x, now;
int mp[maxn];
int main() {
#ifdef MyTest
freopen("Sakura.txt", "r", stdin);
#endif
ios::sync_with_stdio(false);
cin.tie(0);
cin >> q >> x;
for(int i = 0; i < q; ++i) {
int y;
cin >> y;
int cnt = ceil(1.0 * (now - y) / x);
y = y + cnt * x;
if(y < q + 5) ++mp[y];
while(mp[now]) {
if(now + x < q + 5) mp[now + x] = mp[now] - 1, mp[now] = 1;
++now;
}
cout << now << '\n';
}
return 0;
}