QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#790656 | #9302. Caesar Cipher | IllusionaryDominance# | WA | 607ms | 37572kb | C++20 | 3.3kb | 2024-11-28 14:27:38 | 2024-11-28 14:27:38 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 5e5 + 10;
const ll base = 1e9 + 7;
const ll MOD = 998244353998244347ll;
ll pw[N], preSum[N], a[N];
struct SegmentTree{
ll tag[N << 2], maxs[N << 2], Hash[N << 2];
void push_down(int o, int lenL, int lenR) {
if(tag[o]){
tag[o << 1] += tag[o];
tag[o << 1 | 1] += tag[o];
maxs[o << 1] += tag[o];
maxs[o << 1 | 1] += tag[o];
(Hash[o << 1] += preSum[lenL - 1]) %= MOD;
(Hash[o << 1 | 1] += preSum[lenR - 1]) %= MOD;
tag[o] = 0;
}
}
void push_up(int o, int lenL, int lenR) {maxs[o] = max(maxs[o << 1], maxs[o << 1 | 1]), Hash[o] = ((__int128)Hash[o << 1] * pw[lenR]) + Hash[o << 1 | 1];}
void build(int o, int l, int r) {
if(l == r) return maxs[o] = Hash[o] = a[l], []{}();
int mid = (l + r) >> 1;
build(o << 1, l, mid);
build(o << 1 | 1, mid + 1, r);
push_up(o, mid - l + 1, r - mid);
// cerr << "o: " << o << " " << l << " " << r << " " << Hash[o] << " " << maxs[o] << "\n";
}
void modifyAdd(int o, int l, int r, int L, int R) {
if(L <= l && r <= R) return ++ tag[o], ++ maxs[o], (Hash[o] += preSum[r - l]) %= MOD, []{}();
int mid = (l + r) >> 1;
push_down(o, mid - l + 1, r - mid);
if(mid >= L) modifyAdd(o << 1, l, mid, L, R);
if(mid < R) modifyAdd(o << 1 | 1, mid + 1, r, L, R);
push_up(o, mid - l + 1, r - mid);
}
void cover(int o, int l, int r) {
if(maxs[o] < 65536) return;
if(l == r) return tag[o] = maxs[o] = Hash[o] = 0, []{}();
int mid = (l + r) >> 1;
push_down(o, mid - l + 1, r - mid);
cover(o << 1, l, mid); cover(o << 1 | 1, mid + 1, r);
push_up(o, mid - l + 1, r - mid);
}
pair<ll, int> queryHash(int o, int l, int r, int L, int R) {
if(L <= l && r <= R) return {Hash[o], r - l + 1};
int mid = (l + r) >> 1;
pair<ll, int>re1 = {0, 0}, re2 = {0, 0};
push_down(o, mid - l + 1, r - mid);
if(mid >= L) re1 = queryHash(o << 1, l, mid, L, R);
if(mid < R) re2 = queryHash(o << 1 | 1, mid + 1, r, L, R);
return {(__int128)(re1.first * pw[re2.second] + re2.first) % MOD, re1.second + re2.second};
}
}Sgtree;
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n, q; cin >> n >> q;
pw[0] = preSum[0] = 1;
for (int i = 1; i <= n; ++ i) pw[i] = (__int128)pw[i - 1] * base % MOD, preSum[i] = (preSum[i - 1] + pw[i]) % MOD;
for (int i = 1; i <= n; ++ i) cin >> a[i];
Sgtree.build(1, 1, n);
// for (int i = 1; i <= n; ++ i) cerr << Sgtree.queryHash(1, 1, n, i, i).first << "\n";
for (int i = 1; i <= q; ++ i){
int op, x, y, L, l, r;
cin >> op;
switch (op)
{
case 1:
cin >> l >> r;
Sgtree.modifyAdd(1, 1, n, l, r);
Sgtree.cover(1, 1, n);
break;
default:
cin >> x >> y >> L;
cout << (Sgtree.queryHash(1, 1, n, x, x + L - 1) == Sgtree.queryHash(1, 1, n, y, y + L - 1) ? "yes\n" : "no\n");
break;
}
}
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 13804kb
input:
5 6 1 2 1 2 1 2 1 2 2 2 1 3 3 1 1 1 1 3 5 2 1 2 4 2 1 2 2
output:
no yes no yes
result:
ok 4 token(s): yes count is 2, no count is 2
Test #2:
score: 0
Accepted
time: 2ms
memory: 14064kb
input:
3 3 0 65535 65535 2 1 2 2 1 2 3 2 1 2 2
output:
no yes
result:
ok 2 token(s): yes count is 1, no count is 1
Test #3:
score: 0
Accepted
time: 2ms
memory: 13860kb
input:
1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes ...
result:
ok 1000 token(s): yes count is 1000, no count is 0
Test #4:
score: 0
Accepted
time: 94ms
memory: 22016kb
input:
100000 100000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes ...
result:
ok 100000 token(s): yes count is 100000, no count is 0
Test #5:
score: 0
Accepted
time: 558ms
memory: 37572kb
input:
500000 500000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes ...
result:
ok 500000 token(s): yes count is 500000, no count is 0
Test #6:
score: 0
Accepted
time: 507ms
memory: 36772kb
input:
500000 500000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes ...
result:
ok 500000 token(s): yes count is 500000, no count is 0
Test #7:
score: -100
Wrong Answer
time: 607ms
memory: 36900kb
input:
500000 500000 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 6553...
output:
no no no no no no no no no no no no no no no no no no no no no no yes 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 yes no no no no no no no no no no no no no no no no n...
result:
wrong answer expected YES, found NO [1st token]