QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#825702 | #9774. Same Sum | ucup-team191# | TL | 1463ms | 16168kb | C++23 | 2.6kb | 2024-12-21 21:37:09 | 2024-12-21 21:37:10 |
Judging History
你现在查看的是最新测评结果
- [2025-01-11 11:59:18]
- hack成功,自动添加数据
- (/hack/1443)
- [2024-12-23 17:02:06]
- hack成功,自动添加数据
- (/hack/1310)
- [2024-12-23 16:48:26]
- hack成功,自动添加数据
- (/hack/1309)
- [2024-12-23 16:33:45]
- hack成功,自动添加数据
- (/hack/1308)
- [2024-12-23 16:23:53]
- hack成功,自动添加数据
- (/hack/1307)
- [2024-12-23 16:13:08]
- hack成功,自动添加数据
- (/hack/1306)
- [2024-12-23 15:54:42]
- hack成功,自动添加数据
- (/hack/1305)
- [2024-12-23 14:58:39]
- hack成功,自动添加数据
- (/hack/1304)
- [2024-12-23 09:58:11]
- hack成功,自动添加数据
- (/hack/1302)
- [2024-12-23 09:47:22]
- hack成功,自动添加数据
- (/hack/1301)
- [2024-12-23 09:41:23]
- hack成功,自动添加数据
- (/hack/1300)
- [2024-12-23 09:26:32]
- hack成功,自动添加数据
- (/hack/1299)
- [2024-12-23 09:19:58]
- hack成功,自动添加数据
- (/hack/1298)
- [2024-12-23 09:13:29]
- hack成功,自动添加数据
- (/hack/1297)
- [2024-12-22 18:52:18]
- hack成功,自动添加数据
- (/hack/1296)
- [2024-12-22 18:13:14]
- hack成功,自动添加数据
- (/hack/1294)
- [2024-12-21 21:37:09]
- 提交
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 500;
const int OFF = (1 << 18);
const int MOD = 998244353;
const int BS = 31337;
inline int add(int A, int B) {
if(A + B >= MOD) return A + B - MOD;
return A + B;
}
inline int sub(int A, int B) {
if(A - B < 0) return A - B + MOD;
return A - B;
}
inline int mul(int A, int B) {
return A * 1ll * B % MOD;
}
int pott[2 * OFF];
inline int pot(int A, ll B) {
if(A == BS && B < 2 * OFF && B > 0) return pott[B];
if(B < 0) B = (B % (MOD - 1)) + (MOD - 1);
B %= (MOD - 1);
int ret = 1;
for(; B ; B >>= 1) {
if(B & 1) ret = mul(ret, A);
A = mul(A, A);
}
return ret;
}
int T[2 * OFF], rT[2 * OFF], prop[2 * OFF];
ll Tsum[2 * OFF];
void refresh(int x, int len) {
if(!prop[x]) return;
Tsum[x] += (ll)prop[x] * len;
T[x] = mul(T[x], pot(BS, prop[x]));
rT[x] = mul(rT[x], pot(BS, -prop[x]));
if(x < OFF) {
prop[2 * x] += prop[x];
prop[2 * x + 1] += prop[x];
}
prop[x] = 0;
}
void update(int i, int a, int b, int lo, int hi, int kol) {
if(lo <= a && b <= hi) {
prop[i] += kol; refresh(i, b - a + 1);
return;
}
refresh(i, b - a + 1);
if(a > hi || b < lo) return;
update(2 * i, a, (a + b) / 2, lo, hi, kol);
update(2 * i + 1, (a + b) / 2 + 1, b, lo, hi, kol);
T[i] = add(T[2 * i], T[2 * i + 1]);
rT[i] = add(rT[2 * i], rT[2 * i + 1]);
Tsum[i] = Tsum[2 * i] + Tsum[2 * i + 1];
}
int ob_hsh, rev_hsh;
ll sum_q;
void query(int i, int a, int b, int lo, int hi) {
refresh(i, b - a + 1);
if(lo <= a && b <= hi) {
sum_q += Tsum[i];
ob_hsh = add(ob_hsh, T[i]);
rev_hsh = add(rev_hsh, rT[i]);
return;
}
if(a > hi || b < lo) return;
query(2 * i, a, (a + b) / 2, lo, hi);
query(2 * i + 1, (a + b) / 2 + 1, b, lo, hi);
}
int main() {
pott[0] = 1;
for(int i = 1;i < 2 * OFF;i++) pott[i] = mul(BS, pott[i - 1]);
int n, q; scanf("%d%d", &n, &q);
for(int i = 0;i < n;i++) {
int a; scanf("%d", &a);
Tsum[OFF + i] = a;
T[OFF + i] = pot(BS, a);
rT[OFF + i] = pot(BS, -a);
}
for(int i = OFF - 1; i ;i--) {
T[i] = add(T[2 * i], T[2 * i + 1]);
rT[i] = add(rT[2 * i], rT[2 * i + 1]);
Tsum[i] = Tsum[2 * i] + Tsum[2 * i + 1];
}
for(;q--;) {
int ty, l, r, v;
scanf("%d%d%d", &ty, &l, &r);l--, r--;
if(ty == 1) {
scanf("%d", &v);
update(1, 0, OFF - 1, l, r, v);
} else {
sum_q = 0; ob_hsh = rev_hsh = 0;
query(1, 0, OFF - 1, l, r);
ll val = sum_q / ((r - l + 1) / 2);
printf((ob_hsh == mul(rev_hsh, pot(BS, val))) ? "YES\n" : "NO\n");
}
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 14128kb
input:
8 4 1 2 3 4 5 6 7 8 2 1 8 1 1 4 4 2 1 6 2 1 8
output:
YES NO YES
result:
ok 3 token(s): yes count is 2, no count is 1
Test #2:
score: 0
Accepted
time: 1417ms
memory: 16160kb
input:
200000 200000 0 0 0 1 1 0 2 1 1 2 0 1 0 0 0 2 1 0 1 2 2 1 2 1 2 0 0 2 1 2 1 0 0 2 0 2 1 1 1 2 0 0 0 0 2 0 1 0 0 2 2 1 1 0 0 2 1 0 2 0 2 1 2 1 0 1 2 1 0 1 2 1 2 1 0 1 2 0 1 0 1 1 0 2 1 2 0 2 2 1 1 2 1 2 2 0 0 1 2 0 0 2 2 0 1 2 2 0 0 1 2 1 2 0 2 0 0 2 0 2 1 0 1 1 1 1 2 1 2 0 1 2 1 0 2 1 0 1 1 2 2 0 1 ...
output:
NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO ...
result:
ok 100047 token(s): yes count is 22, no count is 100025
Test #3:
score: 0
Accepted
time: 1463ms
memory: 16168kb
input:
200000 200000 5 5 2 0 1 1 4 1 1 0 4 2 2 5 5 4 1 2 2 0 3 3 3 2 5 4 1 5 1 0 0 4 3 4 2 2 3 1 4 2 0 5 4 0 2 5 5 5 2 2 3 4 0 2 2 5 0 2 3 5 4 0 0 2 1 0 5 3 1 4 5 2 2 3 4 5 0 5 5 5 3 3 0 1 4 3 0 0 3 2 2 0 4 5 5 5 2 4 5 2 5 3 1 1 5 2 1 0 1 0 5 0 0 1 5 1 5 3 1 5 3 5 4 0 2 2 4 2 5 2 3 4 5 4 3 5 2 5 2 4 5 3 4 ...
output:
NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO ...
result:
ok 99734 token(s): yes count is 10, no count is 99724
Test #4:
score: -100
Time Limit Exceeded
input:
200000 200000 185447 70128 80288 38126 188018 126450 46081 189881 15377 21028 12588 100061 7218 74518 162803 34448 90998 44793 167718 16370 136024 153269 186316 137564 3082 169700 175712 19214 82647 72919 170919 142138 57755 168197 81575 126456 183138 106882 167154 184388 198667 190302 188371 183732...
output:
NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO ...