比赛 2026.9.12 评测结果 AAAAAAAAAA
题目名称 画线 最终得分 100
用户昵称 RpUtl 运行时间 1.520 s
代码语言 C++ 内存使用 13.38 MiB
提交时间 2026-09-12 11:00:17
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
const int inf = 1e9;
int n, q, x[N];
struct sgt {
    #define ls (p << 1)
    #define rs (p << 1 | 1)
    int mx[N << 2], mn[N << 2];
    void pushup(int p) {
        mx[p] = max(mx[ls], mx[rs]);
        mn[p] = min(mn[ls], mn[rs]);
    }
    void build(int p, int l, int r) {
        if (l == r) {
            mx[p] = 0, mn[p] = inf;
        } else {
            int mid = (l + r) >> 1;
            build(ls, l, mid);
            build(rs, mid + 1, r);
            pushup(p);
        }
    } 
    void upd(int p, int l, int r, int x, int v) {
        if (l == r) {
            mx[p] = max(mx[p], v);
            mn[p] = min(mn[p], v);
        } else {
            int mid = (l + r) >> 1;
            if (x <= mid) upd(ls, l, mid, x, v);
            if (x > mid) upd(rs, mid + 1, r, x, v);
            pushup(p);
        }
    }
    int maxx(int p, int l, int r, int L, int R) {
        if (L <= l && r <= R) {
            return mx[p];
        } else {
            int mid = (l + r) >> 1, cnt = 0;
            if (L <= mid) cnt = max(cnt, maxx(ls, l, mid, L, R));
            if (R > mid) cnt = max(cnt, maxx(rs, mid + 1, r, L, R));
            return cnt;
        }
    }
    int minx(int p, int l, int r, int L, int R) {
        if (L <= l && r <= R) {
            return mn[p];
        } else {
            int mid = (l + r) >> 1, cnt = inf;
            if (L <= mid) cnt = min(cnt, minx(ls, l, mid, L, R));
            if (R > mid) cnt = min(cnt, minx(rs, mid + 1, r, L, R));
            return cnt;
        }
    }
} T;
bool check(int x, int y) {
    return (T.minx(1, 1, n, x, y) < x) || (T.maxx(1, 1, n, x, y) > y);
}
void upd(int x, int y) {
    T.upd(1, 1, n, x, y);
    T.upd(1, 1, n, y, x);
    return;
}
int main() {
    freopen("circle.in", "r", stdin);
    freopen("circle.out", "w", stdout); 
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    cin >> n >> q;
    T.build(1, 1, n);
    for (int i = 1, x, y; i <= q; i++) {
        cin >> x >> y;
        if (x > y) swap(x, y);
        if (check(x, y)) {
            cout << "No" << '\n';
        } else {
            cout << "Yes" << '\n';
            upd(x, y);
        }
    }
    return 0;
} 
/*
500 4
4 1
3 2
6 5
*/