Submission #69505633


Source Code Expand

Copy
/*
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
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
/*
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
AC × 2
AC × 34
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


2025-09-25 (Thu)
19:56:25 +09:00