Submission #69505633
Source Code Expand
Copy
/*Original Python code:import sysdata = list(map(int, sys.stdin.buffer.read().split()))it = iter(data)N = next(it)Q = next(it)INF = 10**9size = 1while size < N:size <<= 1min_seg = [INF] * (2 * size)max_seg = [-INF] * (2 * size)def point_update(pos, val):i = pos + sizemin_seg[i] = valmax_seg[i] = vali //= 2while i:l = i * 2
/*
Original Python code:
import sys
data = list(map(int, sys.stdin.buffer.read().split()))
it = iter(data)
N = next(it)
Q = next(it)
INF = 10**9
size = 1
while size < N:
size <<= 1
min_seg = [INF] * (2 * size)
max_seg = [-INF] * (2 * size)
def point_update(pos, val):
i = pos + size
min_seg[i] = val
max_seg[i] = val
i //= 2
while i:
l = i * 2
r = l + 1
mv = min_seg[l] if min_seg[l] < min_seg[r] else min_seg[r]
xv = max_seg[l] if max_seg[l] > max_seg[r] else max_seg[r]
min_seg[i] = mv
max_seg[i] = xv
i //= 2
out_lines = []
for _ in range(Q):
a = next(it)
b = next(it)
if a > b:
a, b = b, a
if b <= a + 1:
out_lines.append("Yes")
point_update(a - 1, b)
point_update(b - 1, a)
l = a
r = b - 1
L = l + size
R = r + size
cur_min = INF
cur_max = -INF
while L < R:
if (L & 1):
vmin = min_seg[L]
if vmin < cur_min: cur_min = vmin
vmax = max_seg[L]
if vmax > cur_max: cur_max = vmax
L += 1
if (R & 1):
R -= 1
vmin = min_seg[R]
if vmin < cur_min: cur_min = vmin
vmax = max_seg[R]
if vmax > cur_max: cur_max = vmax
L //= 2
R //= 2
if cur_min < a or cur_max > b:
out_lines.append("No")
else:
out_lines.append("Yes")
point_update(a - 1, b)
point_update(b - 1, a)
sys.stdout.write("\n".join(out_lines))
*/
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main() {
vector<int> data;
int x;
while (cin >> x) {
data.push_back(x);
}
int idx = 0;
int N = data[idx++];
int Q = data[idx++];
const int INF = 1000000000;
int size = 1;
while (size < N) size <<= 1;
vector<int> min_seg(2 * size, INF);
vector<int> max_seg(2 * size, -INF);
auto point_update = [&](int pos, int val) {
int i = pos + size;
min_seg[i] = val;
max_seg[i] = val;
i /= 2;
while (i) {
int l = i * 2;
int r = l + 1;
int mv = min_seg[l] < min_seg[r] ? min_seg[l] : min_seg[r];
int xv = max_seg[l] > max_seg[r] ? max_seg[l] : max_seg[r];
min_seg[i] = mv;
max_seg[i] = xv;
i /= 2;
}
};
vector<string> out_lines;
for (int q = 0; q < Q; ++q) {
int a = data[idx++];
int b = data[idx++];
if (a > b) swap(a, b);
if (b <= a + 1) {
out_lines.push_back("Yes");
point_update(a - 1, b);
point_update(b - 1, a);
continue;
}
int l = a;
int r = b - 1;
int L = l + size;
int R = r + size;
int cur_min = INF;
int cur_max = -INF;
while (L < R) {
if (L & 1) {
int vmin = min_seg[L];
if (vmin < cur_min) cur_min = vmin;
int vmax = max_seg[L];
if (vmax > cur_max) cur_max = vmax;
L++;
}
if (R & 1) {
R--;
int vmin = min_seg[R];
if (vmin < cur_min) cur_min = vmin;
int vmax = max_seg[R];
if (vmax > cur_max) cur_max = vmax;
}
L /= 2;
R /= 2;
}
if (cur_min < a || cur_max > b) {
out_lines.push_back("No");
} else {
out_lines.push_back("Yes");
point_update(a - 1, b);
point_update(b - 1, a);
}
}
for (const auto& line : out_lines) {
cout << line << '\n';
}
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | F - Adding Chords |
| User | SqRooti |
| Language | C++ 17 (gcc 12.2) |
| Score | 525 |
| Code Size | 3947 Byte |
| Status | AC |
| Exec Time | 264 ms |
| Memory | 38544 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 525 / 525 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | sample_01.txt, sample_02.txt |
| All | min.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt, random_21.txt, random_22.txt, random_23.txt, random_24.txt, random_25.txt, random_26.txt, random_27.txt, random_28.txt, random_29.txt, random_30.txt, random_31.txt, sample_01.txt, sample_02.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| min.txt | AC | 1 ms | 3528 KiB |
| random_01.txt | AC | 191 ms | 38392 KiB |
| random_02.txt | AC | 60 ms | 24428 KiB |
| random_03.txt | AC | 195 ms | 38368 KiB |
| random_04.txt | AC | 133 ms | 29556 KiB |
| random_05.txt | AC | 192 ms | 38396 KiB |
| random_06.txt | AC | 115 ms | 29216 KiB |
| random_07.txt | AC | 188 ms | 38316 KiB |
| random_08.txt | AC | 150 ms | 29876 KiB |
| random_09.txt | AC | 162 ms | 38408 KiB |
| random_10.txt | AC | 13 ms | 20416 KiB |
| random_11.txt | AC | 162 ms | 38456 KiB |
| random_12.txt | AC | 80 ms | 29044 KiB |
| random_13.txt | AC | 192 ms | 38460 KiB |
| random_14.txt | AC | 145 ms | 29748 KiB |
| random_15.txt | AC | 190 ms | 38424 KiB |
| random_16.txt | AC | 125 ms | 21468 KiB |
| random_17.txt | AC | 166 ms | 38380 KiB |
| random_18.txt | AC | 164 ms | 38408 KiB |
| random_19.txt | AC | 198 ms | 38404 KiB |
| random_20.txt | AC | 189 ms | 38544 KiB |
| random_21.txt | AC | 172 ms | 38404 KiB |
| random_22.txt | AC | 188 ms | 38356 KiB |
| random_23.txt | AC | 165 ms | 38392 KiB |
| random_24.txt | AC | 189 ms | 38420 KiB |
| random_25.txt | AC | 164 ms | 38432 KiB |
| random_26.txt | AC | 264 ms | 38456 KiB |
| random_27.txt | AC | 260 ms | 38312 KiB |
| random_28.txt | AC | 161 ms | 38408 KiB |
| random_29.txt | AC | 162 ms | 38392 KiB |
| random_30.txt | AC | 194 ms | 38408 KiB |
| random_31.txt | AC | 193 ms | 38424 KiB |
| sample_01.txt | AC | 1 ms | 3480 KiB |
| sample_02.txt | AC | 9 ms | 19508 KiB |