結果
| 問題 | No.3565 Take from Excluded |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-07-09 23:14:45 |
| 言語 | C++17 (gcc 15.2.0 + boost 1.90.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,545 bytes |
| 記録 | |
| コンパイル時間 | 1,186 ms |
| コンパイル使用メモリ | 214,216 KB |
| 実行使用メモリ | 5,632 KB |
| 最終ジャッジ日時 | 2026-07-09 23:14:51 |
| 合計ジャッジ時間 | 4,691 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 5 WA * 9 RE * 4 |
ソースコード
#include <bits/stdc++.h>
using LL = long long;
const int N = (1 << 14) + 7;
const int S = (1 << 14) - 1;
const int MOD = 998244353;
LL first;
int q[N], fr, ba, s1, s2;
int a[N], n, m;
int main() {
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; ++i)
scanf("%d", &a[i]);
std::sort(a + 1, a + n + 1);
n = std::unique(a + 1, a + n + 1) - a - 1;
s1 = n;
first = a[1];
q[fr = ba = 1] = 1;
for(int i = 2; i <= n; ++i)
if(a[i] == a[i - 1] + 1)
++q[ba];
else {
s2 += a[i] - a[i - 1] - 1;
q[++ba] = a[i] - a[i - 1] - 1;
q[++ba] = 1;
}
while(m--) {
int k, x, l;
scanf("%d%d%d", &k, &x, &l);
while(k >= 1) {
--k;
first = (first + q[fr]) % MOD;
s1 -= q[fr];
std::swap(s1, s2);
fr = (fr + 1) & S;
while(s1 >= l) {
s2 -= q[ba];
ba = (ba - 1) & S;
s1 -= q[ba];
ba = (ba - 1) & S;
}
ba = (ba + 1) & S;
q[ba] = l - s1;
s1 = l;
if(s2 <= l)
break;
}
if(k >= 1) {
if(s2 < l) {
ba = (ba + 1) & S;
q[ba] = l - s2;
}
first = (first + 2LL * l * (k / (ba - fr + 1))) % MOD;
k %= (ba - fr + 1);
while(k--) {
first = (first + q[fr]) % MOD;
ba = (ba + 1) & S;
q[ba] = q[fr];
fr = (fr + 1) & S;
}
ba = (ba - 1) & S;
}
LL ans = (first + x - 1) % MOD, now = (fr + 1) & S, sz = q[fr];
while(sz < x) {
ans = (ans + q[now]) % MOD;
now = (now + 1) & S;
sz += q[now];
now = (now + 1) & S;
}
printf("%lld\n", ans);
}
return 0;
}