QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#617014 | #9242. An Easy Geometry Problem | ucup-team4153# | WA | 722ms | 39704kb | C++20 | 3.5kb | 2024-10-06 13:29:36 | 2024-10-06 13:29:37 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 7;
const int seed = 19260817;
const int seed2 = 233;
typedef long long ll;
const ll mod = (ll) 1e18 + 7;
const ll mod2 = (ll) 1e18 + 9;
int n, q, K, b;
ll seedpow[N], seedpow2[N];
ll a[N];
struct node {
int l, r;
pair<ll, ll> f, g;
} Tree[N << 2];
node operator+(const node &o1, const node &o2) {
node ans;
ans.l = o1.l;
ans.r = o2.r;
int l1 = o1.r - o1.l + 1;
int r1 = o2.r - o2.l + 1;
ans.f = {((__int128_t) o1.f.first * seedpow[r1] + o2.f.first) % mod,
((__int128_t) o1.f.second * seedpow2[r1] + o2.f.second) % mod2};
ans.g = {((__int128_t) o2.g.first * seedpow[l1] + o1.g.first) % mod,
((__int128_t) o2.g.second * seedpow2[l1] + o1.g.second) % mod2};
return ans;
}
void build(int k, int l, int r) {
if (l == r) {
Tree[k].l = Tree[k].r = l;
Tree[k].f.first = (a[l] % mod + mod) % mod;
Tree[k].f.second = (a[l] % mod2 + mod2) % mod2;
Tree[k].g.first = (K - Tree[k].f.first + mod) % mod;
Tree[k].g.second = (K - Tree[k].f.second + mod2) % mod2;
return;
}
int mid = (l + r) >> 1;
build(k << 1, l, mid);
build(k << 1 | 1, mid + 1, r);
Tree[k] = Tree[k << 1] + Tree[k << 1 | 1];
}
void update(int k, int pos) {
if (Tree[k].l == Tree[k].r) {
Tree[k].f.first = (a[Tree[k].l] % mod + mod) % mod;
Tree[k].f.second = (a[Tree[k].l] % mod2 + mod2) % mod2;
Tree[k].g.first = (K - Tree[k].f.first + mod) % mod;
Tree[k].g.second = (K - Tree[k].f.second + mod2) % mod2;
return;
}
int mid = (Tree[k].l + Tree[k].r) >> 1;
if (pos <= mid)update(k << 1, pos);
else update(k << 1 | 1, pos);
Tree[k] = Tree[k << 1] + Tree[k << 1 | 1];
}
node query(int k, int l, int r) {
if (Tree[k].l >= l && Tree[k].r <= r) {
return Tree[k];
}
int mid = (Tree[k].l + Tree[k].r) >> 1;
if (r <= mid)return query(k << 1, l, r);
if (l > mid)return query(k << 1 | 1, l, r);
return query(k << 1, l, r) + query(k << 1 | 1, l, r);
}
bool check(int l, int r, int len) {
auto Hash1 = query(1, l - len + 1, l).g;
auto Hash2 = query(1, r, r + len - 1).f;
return Hash1 == Hash2;
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
seedpow[0] = 1;
seedpow2[0] = 1;
for (int i = 1; i < N; i++) {
seedpow[i] = (__int128_t) seedpow[i - 1] * seed % mod;
seedpow2[i] = (__int128_t) seedpow2[i - 1] * seed2 % mod2;
}
cin >> n >> q >> K >> b;
for (int i = 1; i <= n; i++)cin >> a[i];
for (int i = n; i >= 1; i--)a[i] = a[i] - a[i - 1];
build(1, 1, n);
while (q--) {
int op;
cin >> op;
if (op == 1) {
int l, r, v;
cin >> l >> r >> v;
a[l] += v;
a[r + 1] -= v;
update(1, l);
if (r + 1 <= n)update(1, r + 1);
} else {
int pos;
cin >> pos;
if (pos == 1 || pos == n || a[pos] + a[pos + 1] != K + b) {
cout << "0\n";
continue;
}
int L = 0, R = min(n - pos - 1, pos - 1);
while (L < R) {
int mid = (L + R + 1) >> 1;
if (check(pos - 1, pos + 2, mid))L = mid;
else R = mid - 1;
}
cout << L + 1 << "\n";
}
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 3ms
memory: 39544kb
input:
6 6 6 2 1 5 9 10 15 18 2 2 1 3 3 -3 2 2 1 3 4 3 2 3 2 4
output:
1 0 2 0
result:
ok 4 number(s): "1 0 2 0"
Test #2:
score: 0
Accepted
time: 11ms
memory: 39556kb
input:
5000 5000 2 0 -329 -328 -327 -326 -325 -324 -323 -322 -321 -320 -319 -318 -317 -316 -315 -314 -313 -312 -311 -310 -309 -308 -307 -306 -305 -304 -303 -302 -301 -300 -299 -298 -297 -296 -295 -294 -293 -292 -291 -290 -289 -288 -287 -286 -285 -284 -283 -282 -281 -280 -279 -278 -277 -276 -275 -274 -273 -...
output:
2 304 73 29 61 292 139 48 17 99 6 5 53 93 3 91 65 29 33 306 21 24 17 21 281 12 16 1 33 7 18 96 7 40 39 13 7 46 43 16 1 72 33 16 22 5 6 189 27 1 35 107 43 34 3 27 20 21 44 56 96 36 2 27 22 30 32 6 5 105 27 37 12 58 2 21 154 17 110 57 3 7 33 15 24 94 68 25 1 14 10 4 10 2 25 39 36 33 164 11 19 181 11 3...
result:
ok 3337 numbers
Test #3:
score: 0
Accepted
time: 15ms
memory: 39704kb
input:
5000 5000 2 0 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 86...
output:
362 82 14 234 140 5 44 136 22 43 29 96 59 23 25 61 193 22 39 39 23 53 48 76 100 58 120 24 12 106 32 48 73 63 116 16 136 10 28 15 84 30 65 1 54 15 16 70 1 95 74 14 17 20 36 254 22 29 70 172 106 2 25 8 98 35 169 16 2 2 99 10 36 40 3 69 272 170 219 12 79 26 78 100 10 167 140 70 34 17 23 21 55 10 6 17 6...
result:
ok 3313 numbers
Test #4:
score: 0
Accepted
time: 13ms
memory: 39500kb
input:
5000 5000 2 0 -456 -455 -454 -453 -452 -451 -450 -449 -448 -447 -446 -445 -444 -443 -442 -441 -440 -439 -438 -437 -436 -435 -434 -433 -432 -431 -430 -429 -428 -427 -426 -425 -424 -423 -422 -421 -420 -419 -418 -417 -416 -415 -414 -413 -412 -411 -410 -409 -408 -407 -406 -405 -404 -403 -402 -401 -400 -...
output:
8 75 80 408 385 73 37 402 338 43 11 163 3 7 80 0 339 47 384 8 10 47 162 307 30 28 36 14 27 126 271 151 4 11 11 9 92 154 2 15 28 160 205 12 59 79 114 23 22 141 7 12 31 42 120 0 34 2 167 157 76 32 20 298 47 104 76 33 49 34 1 40 16 1 28 7 4 55 14 8 68 17 7 117 1 14 14 80 44 8 45 49 65 15 49 56 50 40 14...
result:
ok 3296 numbers
Test #5:
score: 0
Accepted
time: 164ms
memory: 39556kb
input:
200000 199999 -195 -119 -267 -146 191 -456 835 265 -226 -264 160 -101 739 -988 -967 890 -753 -854 514 491 -733 662 681 -362 804 -714 -1000 -790 931 -450 212 94 239 638 400 -167 -360 18 606 256 445 695 -509 643 -892 213 -32 42 400 733 -667 -986 225 493 -699 547 409 -35 394 920 -163 -908 -576 921 -997...
output:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
result:
ok 133315 numbers
Test #6:
score: 0
Accepted
time: 172ms
memory: 39500kb
input:
200000 200000 -847 -858 977 -248 439 -318 -623 -838 -996 484 415 -888 550 940 -880 -224 95 666 -898 -36 922 346 538 858 619 771 234 909 182 -577 -399 -793 -217 -150 -805 -22 -35 -818 342 -469 -620 778 855 -156 699 464 923 935 -824 315 -156 -222 55 282 -800 -542 192 -358 -158 79 259 -57 842 -882 -690...
output:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
result:
ok 133062 numbers
Test #7:
score: 0
Accepted
time: 121ms
memory: 39508kb
input:
199994 199991 -131 936 -384 633 390 191 -647 79 -481 -95 -719 -131 -225 654 392 -232 390 -520 671 440 814 95 945 -854 477 304 -29 -884 -823 -798 -386 -404 614 -875 -792 -630 875 -379 -412 -464 805 -749 952 -737 -765 -36 295 -20 571 419 -519 763 505 803 -14 307 -979 955 743 -210 159 935 499 13 -750 -...
output:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
result:
ok 133017 numbers
Test #8:
score: -100
Wrong Answer
time: 722ms
memory: 39512kb
input:
200000 200000 448 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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:
5389 1796 9804 17353 10388 6661 29834 1133 10416 3492 28995 2953 5964 9846 4293 158 931 30 224 7765 7894 2413 21160 21129 8631 4778 3830 1241 3750 795 5013 529 2176 2266 566 194 2702 4520 2348 1577 6922 372 896 667 650 5530 8798 670 2806 2395 1525 4602 1558 1278 1635 5413 2804 1167 731 3000 1663 529...
result:
wrong answer 1st numbers differ - expected: '5388', found: '5389'