rt,就 T 了一个点,玄关。
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
#define lowbit(x) x&-x
using namespace std;
using namespace __gnu_pbds;
const int N=2e5+10;
int n,m;
struct nord{
tree<int,null_type,less_equal<int>,rb_tree_tag,tree_order_statistics_node_update>t[N];
inline void add(int i,int x,int op){
for (;i<=n;i+=lowbit(i)){
if (op) t[i].insert(x);
else t[i].erase(t[i].upper_bound(x));
}
}
inline int get(int i,int l,int r){
int ans=0;
for (;i;i-=lowbit(i)){
if (t[i].empty()) continue;
ans+=t[i].order_of_key(r+1)-t[i].order_of_key(l);
}
return ans;
}
inline int get(int l,int r,int l1,int r1){
return get(r,l1,r1)-get(l-1,l1,r1);
}
}t[2];
inline int read(){
char c=getchar();
int ans=0,f=1;
while(c<38||c>57) (c==45?f=-1:1),c=getchar();
while(c>=48&&c<=57) ans=(ans<<1)+(ans<<3)+(c^48),c=getchar();
return ans*f;
}
#define pii pair<int,int>
pii aa[N];
main(){
n=read(),m=read();
int ans=0;
for (int i=1;i<=m;i++){
int op=read();
if (op==1){
int l=read(),r=read();
aa[i]={l,r};
ans+=t[0].get(1,l-1,l,r-1)+t[1].get(r+1,n,l+1,r);
t[0].add(l,r,1);
t[1].add(r,l,1);
}
else{
int x=read();
int l=aa[x].first,r=aa[x].second;
t[0].add(l,r,0);
t[1].add(r,l,0);
ans-=t[0].get(1,l-1,l,r-1)+t[1].get(r+1,n,l+1,r);
}
if (ans>0) puts("No");
else puts("Yes");
}
return 0;
}