Submission #528748

# Submission time Handle Problem Language Result Execution time Memory
528748 2022-02-21T09:34:03 Z vuhoanggiap Segments (IZhO18_segments) C++17
100 / 100
2319 ms 7068 KB
#include <bits/stdc++.h>
#define ii pair<int, int> 
#define fi first
#define se second 
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(), (x).end()
using namespace std;

const int maxN = 2e5 + 5, blockSz = 2550, maxCnt = (maxN + blockSz - 1) / blockSz; 
int q, t, idSeg;  
int l[maxN], r[maxN]; 
bool rem[maxN];  

vector<ii> R; 
int n, blockCnt; 
int mnR[maxCnt], mxR[maxCnt]; 
vector<ii> Block[maxCnt]; // change sz
vector<ii> BlockL[maxCnt]; 
vector<ii> cur;  

void reset() {
	for (auto T : cur)
		if (T.se)
			rem[T.fi] = true; 
	R.clear(), cur.clear(); 
	for (int i = 1; i <= idSeg; i++)
		if (!rem[i])
			R.pb({r[i], i}); 
	sort(all(R)); 
	n = R.size(); 
	blockCnt = (n + blockSz - 1) / blockSz; 
	for (int b = 0; b <= blockCnt; b++) {
		Block[b].clear(); 
		BlockL[b].clear(); 
	}
	for (int b = 0; b < blockCnt; b++) {
		for (int i = b * blockSz; i < min(n, (b + 1) * blockSz); i++) {
			int id = R[i].se; 
			Block[b].pb({r[id] - l[id] + 1, r[id]}); 
			BlockL[b].pb({l[id], r[id]}); 
			mxR[b] = r[id]; 
			if (i == b * blockSz)
				mnR[b] = r[id];  
 		}	
 		sort(all(Block[b])); 
 		sort(all(BlockL[b])); 
	}
}

int R_lessthan(int val) {
	return lower_bound(all(R), mp(val, -1)) - R.begin(); 
}

int length_lessthan(int rr, int k) {
	if (!blockCnt)
		return 0; 
	int id = 0, ans = 0; 
	while (id < blockCnt && mxR[id] <= rr) {
		ans += lower_bound(all(Block[id]), mp(k, -1)) - Block[id].begin(); 
		id++; 
	}
	for (auto T : Block[id])
		if (T.se <= rr && T.fi < k)
			ans++; 
	return ans; 
}

int bruh(int ll, int rr) {
	if (!blockCnt)
		return 0; 
	int id = blockCnt - 1; 
	int ans = 0; 
	while (id > 0 && mnR[id] > rr) {
		ans += (int)BlockL[id].size() - (upper_bound(all(BlockL[id]), mp(ll, INT_MAX)) - BlockL[id].begin());
		id--; 
	}
	for (auto T : BlockL[id])
		if (T.fi > ll && T.se > rr) 
			ans++; 
	return ans; 
}

int length_lessthan(int ll, int rr, int k) {
	return length_lessthan(rr, k) - length_lessthan(ll - 1, k); 
}

bool bad(int l1, int r1, int l2, int r2) { return r1 < l2 || r2 < l1; }

int query(int ll, int rr, int k) {
	if (rr - ll + 1 < k)
		return 0; 
	int ans = n; 
	ans -= (R_lessthan(ll + k - 1) + length_lessthan(ll + k - 1, rr, k) + bruh(rr - k + 1, rr)); 
	if (ans < 0) {
		assert(false);  
	}
	for (auto T : cur)
		if (!k || (!bad(l[T.fi], r[T.fi], ll, rr) && min(r[T.fi], rr) - max(l[T.fi], ll) + 1 >= k))
			ans += (T.se ? -1 : 1); 
	return ans; 
}

signed main() {
	ios_base::sync_with_stdio(0); cin.tie(0); 
	cin >> q >> t; 
	for (int i = 1, lastAns = 0; i <= q; i++) {
		if (!(i % blockSz))
			reset(); 
		int type; cin >> type; 
		if (type == 1) {
			idSeg++; cin >> l[idSeg] >> r[idSeg]; 
			l[idSeg] ^= t * lastAns; 
			r[idSeg] ^= t * lastAns; 
			if (l[idSeg] > r[idSeg])
				swap(l[idSeg], r[idSeg]);
			cur.pb({idSeg, 0}); 
		}
		else if (type == 2) {
			int remId; cin >> remId; 
			cur.pb({remId, 1}); 
		}
		else {
			int ll, rr, k; cin >> ll >> rr >> k;  
			ll ^= t * lastAns; 
			rr ^= t * lastAns; 
			if (ll > rr)
				swap(ll, rr);
			cout << (lastAns = query(ll, rr, k)) << '\n'; 
		}
	}
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 332 KB Output is correct
2 Correct 0 ms 332 KB Output is correct
3 Correct 12 ms 332 KB Output is correct
4 Correct 10 ms 352 KB Output is correct
5 Correct 17 ms 520 KB Output is correct
6 Correct 19 ms 460 KB Output is correct
7 Correct 13 ms 332 KB Output is correct
8 Correct 11 ms 516 KB Output is correct
9 Correct 10 ms 460 KB Output is correct
10 Correct 6 ms 504 KB Output is correct
11 Correct 16 ms 460 KB Output is correct
12 Correct 16 ms 460 KB Output is correct
13 Correct 6 ms 516 KB Output is correct
14 Correct 11 ms 460 KB Output is correct
15 Correct 10 ms 332 KB Output is correct
16 Correct 13 ms 364 KB Output is correct
17 Correct 13 ms 460 KB Output is correct
18 Correct 8 ms 460 KB Output is correct
19 Correct 11 ms 404 KB Output is correct
20 Correct 11 ms 460 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 758 ms 2436 KB Output is correct
2 Correct 757 ms 2416 KB Output is correct
3 Correct 735 ms 2532 KB Output is correct
4 Correct 724 ms 2576 KB Output is correct
5 Correct 484 ms 3740 KB Output is correct
6 Correct 463 ms 3820 KB Output is correct
7 Correct 721 ms 2488 KB Output is correct
8 Correct 719 ms 2436 KB Output is correct
9 Correct 743 ms 2344 KB Output is correct
10 Correct 698 ms 1548 KB Output is correct
11 Correct 732 ms 1816 KB Output is correct
12 Correct 665 ms 3220 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 166 ms 668 KB Output is correct
2 Correct 172 ms 696 KB Output is correct
3 Correct 193 ms 788 KB Output is correct
4 Correct 167 ms 656 KB Output is correct
5 Correct 600 ms 3144 KB Output is correct
6 Correct 653 ms 2736 KB Output is correct
7 Correct 648 ms 3128 KB Output is correct
8 Correct 482 ms 3812 KB Output is correct
9 Correct 478 ms 3732 KB Output is correct
10 Correct 518 ms 2912 KB Output is correct
11 Correct 331 ms 836 KB Output is correct
12 Correct 527 ms 3224 KB Output is correct
13 Correct 516 ms 2768 KB Output is correct
14 Correct 442 ms 1724 KB Output is correct
15 Correct 443 ms 1656 KB Output is correct
16 Correct 427 ms 1348 KB Output is correct
17 Correct 688 ms 2416 KB Output is correct
18 Correct 718 ms 2396 KB Output is correct
19 Correct 714 ms 2376 KB Output is correct
20 Correct 694 ms 2552 KB Output is correct
21 Correct 376 ms 964 KB Output is correct
22 Correct 513 ms 2176 KB Output is correct
23 Correct 499 ms 2364 KB Output is correct
24 Correct 501 ms 2120 KB Output is correct
25 Correct 171 ms 752 KB Output is correct
26 Correct 164 ms 676 KB Output is correct
27 Correct 173 ms 656 KB Output is correct
28 Correct 181 ms 732 KB Output is correct
29 Correct 541 ms 2576 KB Output is correct
30 Correct 503 ms 2480 KB Output is correct
31 Correct 463 ms 3704 KB Output is correct
32 Correct 527 ms 2912 KB Output is correct
33 Correct 500 ms 2724 KB Output is correct
34 Correct 440 ms 1648 KB Output is correct
35 Correct 531 ms 2344 KB Output is correct
36 Correct 506 ms 2848 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 222 ms 724 KB Output is correct
2 Correct 207 ms 728 KB Output is correct
3 Correct 213 ms 628 KB Output is correct
4 Correct 206 ms 644 KB Output is correct
5 Correct 624 ms 3384 KB Output is correct
6 Correct 651 ms 1328 KB Output is correct
7 Correct 580 ms 3320 KB Output is correct
8 Correct 677 ms 1456 KB Output is correct
9 Correct 538 ms 2004 KB Output is correct
10 Correct 533 ms 3184 KB Output is correct
11 Correct 481 ms 1192 KB Output is correct
12 Correct 486 ms 3988 KB Output is correct
13 Correct 557 ms 2676 KB Output is correct
14 Correct 521 ms 1892 KB Output is correct
15 Correct 492 ms 3664 KB Output is correct
16 Correct 539 ms 2780 KB Output is correct
17 Correct 745 ms 2420 KB Output is correct
18 Correct 758 ms 2384 KB Output is correct
19 Correct 723 ms 2500 KB Output is correct
20 Correct 736 ms 2772 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 332 KB Output is correct
2 Correct 0 ms 332 KB Output is correct
3 Correct 12 ms 332 KB Output is correct
4 Correct 10 ms 352 KB Output is correct
5 Correct 17 ms 520 KB Output is correct
6 Correct 19 ms 460 KB Output is correct
7 Correct 13 ms 332 KB Output is correct
8 Correct 11 ms 516 KB Output is correct
9 Correct 10 ms 460 KB Output is correct
10 Correct 6 ms 504 KB Output is correct
11 Correct 16 ms 460 KB Output is correct
12 Correct 16 ms 460 KB Output is correct
13 Correct 6 ms 516 KB Output is correct
14 Correct 11 ms 460 KB Output is correct
15 Correct 10 ms 332 KB Output is correct
16 Correct 13 ms 364 KB Output is correct
17 Correct 13 ms 460 KB Output is correct
18 Correct 8 ms 460 KB Output is correct
19 Correct 11 ms 404 KB Output is correct
20 Correct 11 ms 460 KB Output is correct
21 Correct 758 ms 2436 KB Output is correct
22 Correct 757 ms 2416 KB Output is correct
23 Correct 735 ms 2532 KB Output is correct
24 Correct 724 ms 2576 KB Output is correct
25 Correct 484 ms 3740 KB Output is correct
26 Correct 463 ms 3820 KB Output is correct
27 Correct 721 ms 2488 KB Output is correct
28 Correct 719 ms 2436 KB Output is correct
29 Correct 743 ms 2344 KB Output is correct
30 Correct 698 ms 1548 KB Output is correct
31 Correct 732 ms 1816 KB Output is correct
32 Correct 665 ms 3220 KB Output is correct
33 Correct 222 ms 724 KB Output is correct
34 Correct 207 ms 728 KB Output is correct
35 Correct 213 ms 628 KB Output is correct
36 Correct 206 ms 644 KB Output is correct
37 Correct 624 ms 3384 KB Output is correct
38 Correct 651 ms 1328 KB Output is correct
39 Correct 580 ms 3320 KB Output is correct
40 Correct 677 ms 1456 KB Output is correct
41 Correct 538 ms 2004 KB Output is correct
42 Correct 533 ms 3184 KB Output is correct
43 Correct 481 ms 1192 KB Output is correct
44 Correct 486 ms 3988 KB Output is correct
45 Correct 557 ms 2676 KB Output is correct
46 Correct 521 ms 1892 KB Output is correct
47 Correct 492 ms 3664 KB Output is correct
48 Correct 539 ms 2780 KB Output is correct
49 Correct 745 ms 2420 KB Output is correct
50 Correct 758 ms 2384 KB Output is correct
51 Correct 723 ms 2500 KB Output is correct
52 Correct 736 ms 2772 KB Output is correct
53 Correct 205 ms 660 KB Output is correct
54 Correct 208 ms 656 KB Output is correct
55 Correct 206 ms 672 KB Output is correct
56 Correct 199 ms 664 KB Output is correct
57 Correct 741 ms 1804 KB Output is correct
58 Correct 621 ms 1300 KB Output is correct
59 Correct 672 ms 2772 KB Output is correct
60 Correct 644 ms 1148 KB Output is correct
61 Correct 543 ms 2604 KB Output is correct
62 Correct 486 ms 3500 KB Output is correct
63 Correct 464 ms 3668 KB Output is correct
64 Correct 489 ms 3864 KB Output is correct
65 Correct 441 ms 1472 KB Output is correct
66 Correct 465 ms 1500 KB Output is correct
67 Correct 536 ms 2940 KB Output is correct
68 Correct 537 ms 2376 KB Output is correct
69 Correct 713 ms 2452 KB Output is correct
70 Correct 733 ms 2484 KB Output is correct
71 Correct 724 ms 2528 KB Output is correct
72 Correct 744 ms 2404 KB Output is correct
73 Correct 516 ms 1620 KB Output is correct
74 Correct 543 ms 2344 KB Output is correct
75 Correct 433 ms 3892 KB Output is correct
76 Correct 474 ms 3740 KB Output is correct
77 Correct 200 ms 672 KB Output is correct
78 Correct 206 ms 820 KB Output is correct
79 Correct 205 ms 644 KB Output is correct
80 Correct 203 ms 632 KB Output is correct
81 Correct 547 ms 2240 KB Output is correct
82 Correct 492 ms 1624 KB Output is correct
83 Correct 427 ms 1256 KB Output is correct
84 Correct 558 ms 2200 KB Output is correct
85 Correct 537 ms 2852 KB Output is correct
86 Correct 530 ms 3208 KB Output is correct
87 Correct 515 ms 2212 KB Output is correct
88 Correct 418 ms 1208 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 332 KB Output is correct
2 Correct 0 ms 332 KB Output is correct
3 Correct 12 ms 332 KB Output is correct
4 Correct 10 ms 352 KB Output is correct
5 Correct 17 ms 520 KB Output is correct
6 Correct 19 ms 460 KB Output is correct
7 Correct 13 ms 332 KB Output is correct
8 Correct 11 ms 516 KB Output is correct
9 Correct 10 ms 460 KB Output is correct
10 Correct 6 ms 504 KB Output is correct
11 Correct 16 ms 460 KB Output is correct
12 Correct 16 ms 460 KB Output is correct
13 Correct 6 ms 516 KB Output is correct
14 Correct 11 ms 460 KB Output is correct
15 Correct 10 ms 332 KB Output is correct
16 Correct 13 ms 364 KB Output is correct
17 Correct 13 ms 460 KB Output is correct
18 Correct 8 ms 460 KB Output is correct
19 Correct 11 ms 404 KB Output is correct
20 Correct 11 ms 460 KB Output is correct
21 Correct 758 ms 2436 KB Output is correct
22 Correct 757 ms 2416 KB Output is correct
23 Correct 735 ms 2532 KB Output is correct
24 Correct 724 ms 2576 KB Output is correct
25 Correct 484 ms 3740 KB Output is correct
26 Correct 463 ms 3820 KB Output is correct
27 Correct 721 ms 2488 KB Output is correct
28 Correct 719 ms 2436 KB Output is correct
29 Correct 743 ms 2344 KB Output is correct
30 Correct 698 ms 1548 KB Output is correct
31 Correct 732 ms 1816 KB Output is correct
32 Correct 665 ms 3220 KB Output is correct
33 Correct 166 ms 668 KB Output is correct
34 Correct 172 ms 696 KB Output is correct
35 Correct 193 ms 788 KB Output is correct
36 Correct 167 ms 656 KB Output is correct
37 Correct 600 ms 3144 KB Output is correct
38 Correct 653 ms 2736 KB Output is correct
39 Correct 648 ms 3128 KB Output is correct
40 Correct 482 ms 3812 KB Output is correct
41 Correct 478 ms 3732 KB Output is correct
42 Correct 518 ms 2912 KB Output is correct
43 Correct 331 ms 836 KB Output is correct
44 Correct 527 ms 3224 KB Output is correct
45 Correct 516 ms 2768 KB Output is correct
46 Correct 442 ms 1724 KB Output is correct
47 Correct 443 ms 1656 KB Output is correct
48 Correct 427 ms 1348 KB Output is correct
49 Correct 688 ms 2416 KB Output is correct
50 Correct 718 ms 2396 KB Output is correct
51 Correct 714 ms 2376 KB Output is correct
52 Correct 694 ms 2552 KB Output is correct
53 Correct 376 ms 964 KB Output is correct
54 Correct 513 ms 2176 KB Output is correct
55 Correct 499 ms 2364 KB Output is correct
56 Correct 501 ms 2120 KB Output is correct
57 Correct 171 ms 752 KB Output is correct
58 Correct 164 ms 676 KB Output is correct
59 Correct 173 ms 656 KB Output is correct
60 Correct 181 ms 732 KB Output is correct
61 Correct 541 ms 2576 KB Output is correct
62 Correct 503 ms 2480 KB Output is correct
63 Correct 463 ms 3704 KB Output is correct
64 Correct 527 ms 2912 KB Output is correct
65 Correct 500 ms 2724 KB Output is correct
66 Correct 440 ms 1648 KB Output is correct
67 Correct 531 ms 2344 KB Output is correct
68 Correct 506 ms 2848 KB Output is correct
69 Correct 222 ms 724 KB Output is correct
70 Correct 207 ms 728 KB Output is correct
71 Correct 213 ms 628 KB Output is correct
72 Correct 206 ms 644 KB Output is correct
73 Correct 624 ms 3384 KB Output is correct
74 Correct 651 ms 1328 KB Output is correct
75 Correct 580 ms 3320 KB Output is correct
76 Correct 677 ms 1456 KB Output is correct
77 Correct 538 ms 2004 KB Output is correct
78 Correct 533 ms 3184 KB Output is correct
79 Correct 481 ms 1192 KB Output is correct
80 Correct 486 ms 3988 KB Output is correct
81 Correct 557 ms 2676 KB Output is correct
82 Correct 521 ms 1892 KB Output is correct
83 Correct 492 ms 3664 KB Output is correct
84 Correct 539 ms 2780 KB Output is correct
85 Correct 745 ms 2420 KB Output is correct
86 Correct 758 ms 2384 KB Output is correct
87 Correct 723 ms 2500 KB Output is correct
88 Correct 736 ms 2772 KB Output is correct
89 Correct 205 ms 660 KB Output is correct
90 Correct 208 ms 656 KB Output is correct
91 Correct 206 ms 672 KB Output is correct
92 Correct 199 ms 664 KB Output is correct
93 Correct 741 ms 1804 KB Output is correct
94 Correct 621 ms 1300 KB Output is correct
95 Correct 672 ms 2772 KB Output is correct
96 Correct 644 ms 1148 KB Output is correct
97 Correct 543 ms 2604 KB Output is correct
98 Correct 486 ms 3500 KB Output is correct
99 Correct 464 ms 3668 KB Output is correct
100 Correct 489 ms 3864 KB Output is correct
101 Correct 441 ms 1472 KB Output is correct
102 Correct 465 ms 1500 KB Output is correct
103 Correct 536 ms 2940 KB Output is correct
104 Correct 537 ms 2376 KB Output is correct
105 Correct 713 ms 2452 KB Output is correct
106 Correct 733 ms 2484 KB Output is correct
107 Correct 724 ms 2528 KB Output is correct
108 Correct 744 ms 2404 KB Output is correct
109 Correct 516 ms 1620 KB Output is correct
110 Correct 543 ms 2344 KB Output is correct
111 Correct 433 ms 3892 KB Output is correct
112 Correct 474 ms 3740 KB Output is correct
113 Correct 200 ms 672 KB Output is correct
114 Correct 206 ms 820 KB Output is correct
115 Correct 205 ms 644 KB Output is correct
116 Correct 203 ms 632 KB Output is correct
117 Correct 547 ms 2240 KB Output is correct
118 Correct 492 ms 1624 KB Output is correct
119 Correct 427 ms 1256 KB Output is correct
120 Correct 558 ms 2200 KB Output is correct
121 Correct 537 ms 2852 KB Output is correct
122 Correct 530 ms 3208 KB Output is correct
123 Correct 515 ms 2212 KB Output is correct
124 Correct 418 ms 1208 KB Output is correct
125 Correct 440 ms 1080 KB Output is correct
126 Correct 414 ms 1128 KB Output is correct
127 Correct 457 ms 1032 KB Output is correct
128 Correct 420 ms 1092 KB Output is correct
129 Correct 408 ms 1100 KB Output is correct
130 Correct 428 ms 1112 KB Output is correct
131 Correct 1501 ms 2060 KB Output is correct
132 Correct 2198 ms 4132 KB Output is correct
133 Correct 2275 ms 5372 KB Output is correct
134 Correct 1707 ms 2492 KB Output is correct
135 Correct 2216 ms 5968 KB Output is correct
136 Correct 1089 ms 1352 KB Output is correct
137 Correct 1792 ms 6860 KB Output is correct
138 Correct 1800 ms 4596 KB Output is correct
139 Correct 1861 ms 5944 KB Output is correct
140 Correct 1857 ms 6400 KB Output is correct
141 Correct 1848 ms 5360 KB Output is correct
142 Correct 909 ms 1696 KB Output is correct
143 Correct 1239 ms 2528 KB Output is correct
144 Correct 770 ms 1464 KB Output is correct
145 Correct 1820 ms 6344 KB Output is correct
146 Correct 1518 ms 3432 KB Output is correct
147 Correct 1247 ms 2548 KB Output is correct
148 Correct 1207 ms 2528 KB Output is correct
149 Correct 2240 ms 4580 KB Output is correct
150 Correct 2280 ms 4508 KB Output is correct
151 Correct 2319 ms 4480 KB Output is correct
152 Correct 2260 ms 4444 KB Output is correct
153 Correct 2230 ms 4496 KB Output is correct
154 Correct 2279 ms 4420 KB Output is correct
155 Correct 1061 ms 2032 KB Output is correct
156 Correct 1372 ms 2676 KB Output is correct
157 Correct 1823 ms 6428 KB Output is correct
158 Correct 1823 ms 6636 KB Output is correct
159 Correct 1827 ms 4752 KB Output is correct
160 Correct 1597 ms 3612 KB Output is correct
161 Correct 436 ms 1208 KB Output is correct
162 Correct 423 ms 1092 KB Output is correct
163 Correct 440 ms 1096 KB Output is correct
164 Correct 540 ms 1168 KB Output is correct
165 Correct 436 ms 1116 KB Output is correct
166 Correct 440 ms 1156 KB Output is correct
167 Correct 1777 ms 7028 KB Output is correct
168 Correct 1742 ms 7068 KB Output is correct
169 Correct 1839 ms 6428 KB Output is correct
170 Correct 1816 ms 6320 KB Output is correct
171 Correct 1830 ms 5148 KB Output is correct
172 Correct 1445 ms 3132 KB Output is correct
173 Correct 1754 ms 6596 KB Output is correct
174 Correct 1447 ms 3528 KB Output is correct
175 Correct 1783 ms 6072 KB Output is correct
176 Correct 1152 ms 2548 KB Output is correct
177 Correct 1714 ms 4952 KB Output is correct
178 Correct 1687 ms 4536 KB Output is correct