#include <bits/stdc++.h>
#define pb push_back
#define pll pair <ll, ll>
#define MOMI using namespace std;
#define mp make_pair
#define pyshnapyshnakaa ios_base :: sync_with_stdio(0); cin.tie(0); cout.tie(0);
#pragma optimize("TKACHENKO-GORYACHENKO")
#pragma GCC optimize("O3")
// #pragma GCC optimize("Ofast")
// #pragma GCC optimize("unroll-loops")
typedef int ll;
typedef long double ld;
using namespace std;
const ll inf = 2e9 + 500;
const ll maxn = 2e5 + 100;
const ll block = 120;
const ll block_sz = (maxn + block - 1) / block;
ll n, m, k, t;
struct seg{
ll l;
ll r;
inline ll sz() const {
return r - l + 1;
}
ll i;
};
seg S[maxn];
ll ssz = 0;
vector <ll> lasts;
inline bool cmpl(const ll& a, const ll& b) {
return S[a].l < S[b].l;
}
inline bool cmpr(const ll& a, const ll& b) {
return S[a].r < S[b].r;
}
inline bool cmpsz(const ll& a, const ll& b) {
return S[a].sz() < S[b].sz();
}
vector <ll> segsl;
vector <ll> segsr;
vector <ll> R[block];
vector <ll> L[block];
ll MNL[block];
ll MXL[block];
ll MNR[block];
ll MXR[block];
ll IL[maxn];
ll IR[maxn];
bool used[maxn];
inline void buildL(ll q) {
ll w;
sort(L[q].begin(), L[q].end(), cmpsz);
MNL[q] = inf;
MXL[q] = -inf;
for (w = 0; w < L[q].size(); w++) {
MNL[q] = min(MNL[q], S[L[q][w]].l);
MXL[q] = max(MXL[q], S[L[q][w]].l);
}
}
inline void buildR(ll q) {
ll w;
MNR[q] = inf;
MXR[q] = -inf;
sort(R[q].begin(), R[q].end(), cmpsz);
for (w = 0; w < R[q].size(); w++) {
MNR[q] = min(MNR[q], S[R[q][w]].r);
MXR[q] = max(MXR[q], S[R[q][w]].r);
}
}
inline void mrgl() {
ll i, j;
vector <ll> ANS;
while (i != segsl.size() && j != lasts.size()) {
if (cmpl(segsl[i], lasts[j])) {
ANS.pb(segsl[i]);
}
else {
ANS.pb(lasts[j]);
}
}
for (; i < segsl.size(); i++) {
ANS.pb(segsl[i]);
}
for (; j < lasts.size(); j++) {
ANS.pb(lasts[j]);
}
segsl = ANS;
}
inline void mrgr() {
ll i, j;
vector <ll> ANS;
while (i != segsr.size() && j != lasts.size()) {
if (cmpr(segsr[i], lasts[j])) {
ANS.pb(segsr[i]);
}
else {
ANS.pb(lasts[j]);
}
}
for (; i < segsr.size(); i++) {
ANS.pb(segsr[i]);
}
for (; j < lasts.size(); j++) {
ANS.pb(lasts[j]);
}
segsr = ANS;
}
inline void rebuild() {
ll q, w;
ll blocki = 0;
for (q = 0; q < block; q++) {
R[q].clear();
L[q].clear();
}
sort(lasts.begin(), lasts.end(), cmpl);
mrgl();
// sort(segs.begin(), segs.end(), cmpl);
for (auto p : segsl) {
IL[p] = -1;
if (used[p]) {
continue;
}
if (L[blocki].size() > block_sz) {
blocki++;
}
IL[p] = blocki;
L[blocki].pb(p);
}
sort(lasts.begin(), lasts.end(), cmpr);
mrgr();
lasts.clear();
blocki = 0;
// sort(segs.begin(), segs.end(), cmpr);
for (auto p: segsr) {
IR[p] = -1;
if (used[p]) {
continue;
}
if (R[blocki].size() > block_sz) {
blocki++;
}
IR[p] = blocki;
R[blocki].pb(p);
}
for (q = 0; q < block; q++) {
buildL(q);
}
for (q = 0; q < block; q++) {
buildR(q);
}
}
inline void add(seg a) {
lasts.pb(a.i);
// S.pb(a);
S[ssz] = a;
ssz++;
// segs.push_back(a.i);
IL[a.i] = IR[a.i] = -1;
}
inline void del(seg b) {
ll il = IL[b.i], ir = IR[b.i];
used[b.i] = 1;
if (il == -1) {
return;
}
L[il].erase(find(L[il].begin(), L[il].end(), b.i));
R[ir].erase(find(R[ir].begin(), R[ir].end(), b.i));
buildL(il);
buildR(ir);
}
inline ll slowL(ll i, ll x, ll l) {
ll q;
ll ans = 0;
for (q = 0; q < L[i].size(); q++) {
if (S[L[i][q]].l >= l && S[L[i][q]].sz() >= x) {
ans++;
}
}
return ans;
}
inline ll slowR(ll i, ll x, ll r) {
ll q;
ll ans = 0;
for (q = 0; q < R[i].size(); q++) {
if (S[R[i][q]].r <= r && S[R[i][q]].sz() >= x) {
ans++;
}
}
return ans;
}
inline ll bpl(ll i, ll x) {
ll l = -1, r = L[i].size(), M;
while (r - l > 1) {
M = (l + r) / 2;
if (S[L[i][M]].sz() >= x) {
r = M;
}
else {
l = M;
}
}
return r;
}
inline ll bpr(ll i, ll x) {
ll l = -1, r = R[i].size(), M;
while (r - l > 1) {
M = (l + r) / 2;
if (S[R[i][M]].sz() >= x) {
r = M;
}
else {
l = M;
}
}
return r;
}
inline ll fastL(ll i, ll x) {
if (L[i].empty()) {
return 0;
}
// seg good;
// good.l = 0; good.r = x - 1;
// S.pb(good);
ll j = bpl(i, x);
// S.pop_back();
return L[i].size() - j;
}
inline ll fastR(ll i, ll x) {
if (R[i].empty()) {
return 0;
}
// seg good;
// good.l = 0; good.r = x - 1;
// S.pb(good);
ll j = bpr(i, x);
// S.pop_back();
return R[i].size() - j;
}
inline ll getansL(ll x, ll l) {
ll q;
ll ans = 0;
for (q = 0; q < block; q++) {
if (MNL[q] == inf) {
continue;
}
if (MNL[q] >= l) {
ans += fastL(q, x);
continue;
}
if (MXL[q] < l) {
continue;
}
ans += slowL(q, x, l);
}
for (q = 0; q < lasts.size(); q++) {
if (used[lasts[q]]) {
continue;
}
if (S[lasts[q]].l >= l && S[lasts[q]].sz() >= x) {
ans++;
}
}
return ans;
}
inline ll getansR(ll x, ll r) {
ll q;
ll ans = 0;
ll cnt = 0;
for (q = 0; q < block; q++) {
if (MNR[q] == inf) {
continue;
}
// if (q > 1) {
// if (MXR[q - 1] > MNR[q]) {
// exit(-1);
// }
// }
if (MXR[q] <= r) {
ll dans = fastR(q, x);
ans += dans;
continue;
}
if (MNR[q] > r) {
continue;
}
/// MXR[q] > r && MNR[q] <= r,
ll dans = slowR(q, x, r);
ans += dans;
cnt++;
}
// if (cnt > 5) {
// exit(-1);
// }
for (q = 0; q < lasts.size(); q++) {
if (used[lasts[q]]) {
continue;
}
if (S[lasts[q]].r <= r && S[lasts[q]].sz() >= x) {
ans++;
}
}
return ans;
}
inline ll answer(seg c, ll k) {
if (c.sz() < k) {
return 0;
}
ll q, w;
ll ans = 0;
ll lk = c.r - k + 2, rk = c.l + k - 2;
ll allans = getansR(k, inf);
ll dansl = getansL(k, lk);
ll dansr = getansR(k, rk);
ans = allans - dansr - dansl;
return ans;
}
signed main() {
ll q, w, e, a, b, c;
pyshnapyshnakaa;
cin >> n >> t;
// cout << block_sz * block << endl;
ll nxt = 0;
ll lastans = 0;
// ll cnt3 = 0;
segsl.reserve(n);
segsr.reserve(n);
// S.reserve(n);
for (q = 0; q < block; q++) {
L[q].reserve(block_sz);
R[q].reserve(block_sz);
}
for (q = 0; q < n; q++) {
ll comm;
cin >> comm;
ll l, r;
seg x;
if (comm == 1) {
cin >> l >> r;
l ^= (lastans * t);
r ^= (lastans * t);
if (l > r) {
swap(l, r);
}
x.l = l; x.r = r;
x.i = ssz;
add(x);
}
if (comm == 2) {
cin >> a;
a--;
del(S[a]);
}
// if (cnt3 > 8e4 && n > 1e5) {
// exit(-1);
// }
if (comm == 3) {
// cnt3++;
cin >> l >> r;
l ^= (lastans * t);
r ^= (lastans * t);
if (lasts.size() >= block_sz) {
rebuild();
}
if (l > r) {
swap(l, r);
}
x.l = l; x.r = r;
cin >> c;
lastans = answer(x, c);
cout << lastans << '\n';
}
}
return 0;
}
Compilation message
segments.cpp:7:0: warning: ignoring #pragma optimize [-Wunknown-pragmas]
#pragma optimize("TKACHENKO-GORYACHENKO")
segments.cpp: In function 'void buildL(ll)':
segments.cpp:74:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (w = 0; w < L[q].size(); w++) {
~~^~~~~~~~~~~~~
segments.cpp: In function 'void buildR(ll)':
segments.cpp:85:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (w = 0; w < R[q].size(); w++) {
~~^~~~~~~~~~~~~
segments.cpp: In function 'void mrgl()':
segments.cpp:94:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
while (i != segsl.size() && j != lasts.size()) {
~~^~~~~~~~~~~~~~~
segments.cpp:94:32: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
while (i != segsl.size() && j != lasts.size()) {
~~^~~~~~~~~~~~~~~
segments.cpp:102:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (; i < segsl.size(); i++) {
~~^~~~~~~~~~~~~~
segments.cpp:105:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (; j < lasts.size(); j++) {
~~^~~~~~~~~~~~~~
segments.cpp: In function 'void mrgr()':
segments.cpp:114:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
while (i != segsr.size() && j != lasts.size()) {
~~^~~~~~~~~~~~~~~
segments.cpp:114:32: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
while (i != segsr.size() && j != lasts.size()) {
~~^~~~~~~~~~~~~~~
segments.cpp:122:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (; i < segsr.size(); i++) {
~~^~~~~~~~~~~~~~
segments.cpp:125:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (; j < lasts.size(); j++) {
~~^~~~~~~~~~~~~~
segments.cpp: In function 'void rebuild()':
segments.cpp:132:8: warning: unused variable 'w' [-Wunused-variable]
ll q, w;
^
segments.cpp: In function 'll slowL(ll, ll, ll)':
segments.cpp:200:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (q = 0; q < L[i].size(); q++) {
~~^~~~~~~~~~~~~
segments.cpp: In function 'll slowR(ll, ll, ll)':
segments.cpp:211:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (q = 0; q < R[i].size(); q++) {
~~^~~~~~~~~~~~~
segments.cpp: In function 'll getansL(ll, ll)':
segments.cpp:288:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (q = 0; q < lasts.size(); q++) {
~~^~~~~~~~~~~~~~
segments.cpp: In function 'll getansR(ll, ll)':
segments.cpp:328:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (q = 0; q < lasts.size(); q++) {
~~^~~~~~~~~~~~~~
segments.cpp: In function 'll answer(seg, ll)':
segments.cpp:343:5: warning: unused variable 'q' [-Wunused-variable]
ll q, w;
^
segments.cpp:343:8: warning: unused variable 'w' [-Wunused-variable]
ll q, w;
^
segments.cpp: In function 'int main()':
segments.cpp:354:8: warning: unused variable 'w' [-Wunused-variable]
ll q, w, e, a, b, c;
^
segments.cpp:354:11: warning: unused variable 'e' [-Wunused-variable]
ll q, w, e, a, b, c;
^
segments.cpp:354:17: warning: unused variable 'b' [-Wunused-variable]
ll q, w, e, a, b, c;
^
segments.cpp:358:5: warning: unused variable 'nxt' [-Wunused-variable]
ll nxt = 0;
^~~
segments.cpp: In function 'void mrgl()':
segments.cpp:94:11: warning: 'i' is used uninitialized in this function [-Wuninitialized]
while (i != segsl.size() && j != lasts.size()) {
~~^~~~~~~~~~~~~~~
segments.cpp: In function 'void mrgr()':
segments.cpp:114:11: warning: 'i' is used uninitialized in this function [-Wuninitialized]
while (i != segsr.size() && j != lasts.size()) {
~~^~~~~~~~~~~~~~~
segments.cpp: In function 'void rebuild()':
segments.cpp:94:32: warning: 'j' is used uninitialized in this function [-Wuninitialized]
while (i != segsl.size() && j != lasts.size()) {
~~^~~~~~~~~~~~~~~
segments.cpp:92:8: note: 'j' was declared here
ll i, j;
^
segments.cpp:114:32: warning: 'j' may be used uninitialized in this function [-Wmaybe-uninitialized]
while (i != segsr.size() && j != lasts.size()) {
~~^~~~~~~~~~~~~~~
segments.cpp:112:8: note: 'j' was declared here
ll i, j;
^
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
1400 KB |
Output is correct |
2 |
Correct |
3 ms |
1144 KB |
Output is correct |
3 |
Correct |
11 ms |
1528 KB |
Output is correct |
4 |
Correct |
11 ms |
1532 KB |
Output is correct |
5 |
Correct |
20 ms |
1656 KB |
Output is correct |
6 |
Correct |
26 ms |
1656 KB |
Output is correct |
7 |
Correct |
37 ms |
1528 KB |
Output is correct |
8 |
Correct |
79 ms |
1756 KB |
Output is correct |
9 |
Correct |
82 ms |
1656 KB |
Output is correct |
10 |
Correct |
34 ms |
1656 KB |
Output is correct |
11 |
Correct |
39 ms |
1656 KB |
Output is correct |
12 |
Correct |
39 ms |
1528 KB |
Output is correct |
13 |
Correct |
38 ms |
1656 KB |
Output is correct |
14 |
Correct |
88 ms |
1608 KB |
Output is correct |
15 |
Correct |
11 ms |
1504 KB |
Output is correct |
16 |
Correct |
13 ms |
1532 KB |
Output is correct |
17 |
Correct |
63 ms |
1528 KB |
Output is correct |
18 |
Correct |
55 ms |
1656 KB |
Output is correct |
19 |
Correct |
133 ms |
1784 KB |
Output is correct |
20 |
Correct |
89 ms |
1528 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2093 ms |
4364 KB |
Output is correct |
2 |
Correct |
2192 ms |
4292 KB |
Output is correct |
3 |
Correct |
2072 ms |
4292 KB |
Output is correct |
4 |
Correct |
1961 ms |
4556 KB |
Output is correct |
5 |
Correct |
430 ms |
6268 KB |
Output is correct |
6 |
Correct |
277 ms |
6480 KB |
Output is correct |
7 |
Correct |
2086 ms |
4104 KB |
Output is correct |
8 |
Correct |
2060 ms |
4340 KB |
Output is correct |
9 |
Correct |
2123 ms |
4352 KB |
Output is correct |
10 |
Correct |
2065 ms |
3244 KB |
Output is correct |
11 |
Correct |
2192 ms |
3476 KB |
Output is correct |
12 |
Correct |
1566 ms |
5084 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
137 ms |
65540 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
132 ms |
65536 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
1400 KB |
Output is correct |
2 |
Correct |
3 ms |
1144 KB |
Output is correct |
3 |
Correct |
11 ms |
1528 KB |
Output is correct |
4 |
Correct |
11 ms |
1532 KB |
Output is correct |
5 |
Correct |
20 ms |
1656 KB |
Output is correct |
6 |
Correct |
26 ms |
1656 KB |
Output is correct |
7 |
Correct |
37 ms |
1528 KB |
Output is correct |
8 |
Correct |
79 ms |
1756 KB |
Output is correct |
9 |
Correct |
82 ms |
1656 KB |
Output is correct |
10 |
Correct |
34 ms |
1656 KB |
Output is correct |
11 |
Correct |
39 ms |
1656 KB |
Output is correct |
12 |
Correct |
39 ms |
1528 KB |
Output is correct |
13 |
Correct |
38 ms |
1656 KB |
Output is correct |
14 |
Correct |
88 ms |
1608 KB |
Output is correct |
15 |
Correct |
11 ms |
1504 KB |
Output is correct |
16 |
Correct |
13 ms |
1532 KB |
Output is correct |
17 |
Correct |
63 ms |
1528 KB |
Output is correct |
18 |
Correct |
55 ms |
1656 KB |
Output is correct |
19 |
Correct |
133 ms |
1784 KB |
Output is correct |
20 |
Correct |
89 ms |
1528 KB |
Output is correct |
21 |
Correct |
2093 ms |
4364 KB |
Output is correct |
22 |
Correct |
2192 ms |
4292 KB |
Output is correct |
23 |
Correct |
2072 ms |
4292 KB |
Output is correct |
24 |
Correct |
1961 ms |
4556 KB |
Output is correct |
25 |
Correct |
430 ms |
6268 KB |
Output is correct |
26 |
Correct |
277 ms |
6480 KB |
Output is correct |
27 |
Correct |
2086 ms |
4104 KB |
Output is correct |
28 |
Correct |
2060 ms |
4340 KB |
Output is correct |
29 |
Correct |
2123 ms |
4352 KB |
Output is correct |
30 |
Correct |
2065 ms |
3244 KB |
Output is correct |
31 |
Correct |
2192 ms |
3476 KB |
Output is correct |
32 |
Correct |
1566 ms |
5084 KB |
Output is correct |
33 |
Runtime error |
132 ms |
65536 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |
34 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
1400 KB |
Output is correct |
2 |
Correct |
3 ms |
1144 KB |
Output is correct |
3 |
Correct |
11 ms |
1528 KB |
Output is correct |
4 |
Correct |
11 ms |
1532 KB |
Output is correct |
5 |
Correct |
20 ms |
1656 KB |
Output is correct |
6 |
Correct |
26 ms |
1656 KB |
Output is correct |
7 |
Correct |
37 ms |
1528 KB |
Output is correct |
8 |
Correct |
79 ms |
1756 KB |
Output is correct |
9 |
Correct |
82 ms |
1656 KB |
Output is correct |
10 |
Correct |
34 ms |
1656 KB |
Output is correct |
11 |
Correct |
39 ms |
1656 KB |
Output is correct |
12 |
Correct |
39 ms |
1528 KB |
Output is correct |
13 |
Correct |
38 ms |
1656 KB |
Output is correct |
14 |
Correct |
88 ms |
1608 KB |
Output is correct |
15 |
Correct |
11 ms |
1504 KB |
Output is correct |
16 |
Correct |
13 ms |
1532 KB |
Output is correct |
17 |
Correct |
63 ms |
1528 KB |
Output is correct |
18 |
Correct |
55 ms |
1656 KB |
Output is correct |
19 |
Correct |
133 ms |
1784 KB |
Output is correct |
20 |
Correct |
89 ms |
1528 KB |
Output is correct |
21 |
Correct |
2093 ms |
4364 KB |
Output is correct |
22 |
Correct |
2192 ms |
4292 KB |
Output is correct |
23 |
Correct |
2072 ms |
4292 KB |
Output is correct |
24 |
Correct |
1961 ms |
4556 KB |
Output is correct |
25 |
Correct |
430 ms |
6268 KB |
Output is correct |
26 |
Correct |
277 ms |
6480 KB |
Output is correct |
27 |
Correct |
2086 ms |
4104 KB |
Output is correct |
28 |
Correct |
2060 ms |
4340 KB |
Output is correct |
29 |
Correct |
2123 ms |
4352 KB |
Output is correct |
30 |
Correct |
2065 ms |
3244 KB |
Output is correct |
31 |
Correct |
2192 ms |
3476 KB |
Output is correct |
32 |
Correct |
1566 ms |
5084 KB |
Output is correct |
33 |
Runtime error |
137 ms |
65540 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |
34 |
Halted |
0 ms |
0 KB |
- |