| 比赛 |
2026.9.12 |
评测结果 |
AAAAAAAAAA |
| 题目名称 |
画线 |
最终得分 |
100 |
| 用户昵称 |
zcx |
运行时间 |
2.904 s |
| 代码语言 |
C++ |
内存使用 |
61.33 MiB |
| 提交时间 |
2026-09-12 10:10:19 |
显示代码纯文本
#include<bits/stdc++.h>
#define lson num * 2
#define rson num * 2 + 1
#define int long long
using namespace std;
const int N = 1e6 + 5;
const int INF = 1e16 + 1145;
int n,q;
struct tree{
int l,r,val;
} tl[4 * N],tr[4 * N];
void build(int num,int L,int R){
tl[num].l = L;tl[num].r = R;tl[num].val = -INF;
tr[num].l = L;tr[num].r = R;tr[num].val = INF;
if(L == R) return ;
int M = (L + R)>>1;
build(lson,L,M);build(rson,M + 1, R);
}
void add1(int num,int x,int k){
tl[num].val = max(tl[num].val,k);
if(tl[num].l == tl[num].r) return;
if(x <= tl[lson].r) add1(lson,x,k);
else add1(rson,x,k);
}
void add2(int num,int x,int k){
tr[num].val = min(tr[num].val,k);
if(tr[num].l == tr[num].r) return;
if(x <= tr[lson].r) add2(lson,x,k);
else add2(rson,x,k);
}
int ask1(int num,int x,int y){
if(tl[num].l >= x && tl[num].r <= y) return tl[num].val;
int maxn = -INF;
if(x <= tl[lson].r) maxn = max(maxn,ask1(lson,x,y));
if(y > tl[lson].r) maxn = max(maxn,ask1(rson,x,y));
return maxn;
}
int ask2(int num,int x,int y){
if(tr[num].l >= x && tr[num].r <= y) return tr[num].val;
int minn = INF;
if(x <= tr[lson].r) minn = min(minn,ask2(lson,x,y));
if(y > tr[lson].r) minn = min(minn,ask2(rson,x,y));
return minn;
}
signed main()
{
freopen("circle.in","r",stdin);
freopen("circle.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>q;
build(1,1,n);
while(q--){
int x,y;cin>>x>>y;
if(x > y) swap(x,y);
int fl1 = ask1(1,x,y),fl2 = ask2(1,x,y);
if(fl1 < y && fl2 > x ) {
cout<<"Yes\n";
add1(1,x,y);
add2(1,y,x);
}else cout<<"No\n";
}
return 0;
}