| 比赛 |
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
*/