社区讨论
求条
P11619[PumpkinOI Round 1] 种南瓜参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mkl0bmnf
- 此快照首次捕获于
- 2026/01/19 18:13 2 个月前
- 此快照最后确认于
- 2026/01/23 14:10 2 个月前
马蜂不优良,这是提交记录
CPP#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=2e5+10;
const ll inf=0x3f3f3f3f3f3f3f3f;
const ll MOD=1e9+7;
ll n,q,x[N],y[N];
struct minsegtree{
ll tr[4*N],l[4*N],r[4*N],id[N];
void B(ll u,ll L,ll R){
tr[u]=inf,l[u]=L,r[u]=R;
if(L==R){
id[L]=u;
return ;
}
ll mid=(L+R)/2;
B(u*2,L,mid),B(u*2+1,mid+1,R);
}
void build(){B(1,1,n);}
void update(ll u){
if(!u)return ;
tr[u]=min(tr[u*2],tr[u*2+1]);
update(u/2);
}
void change(ll x,ll val){tr[id[x]]=val;update(id[x]/2);}
ll Q(ll u,ll L,ll R){
if(l[u]>=L&&r[u]<=R)return tr[u];
if(l[u]>R||r[u]<L)return inf;
return min(Q(u*2,L,R),Q(u*2+1,L,R));
}
ll query(ll L,ll R){if(L>R)return inf;return Q(1,L,R);}
}l;
struct maxsegtree{
ll tr[4*N],l[4*N],r[4*N],id[N];
void B(ll u,ll L,ll R){
tr[u]=0,l[u]=L,r[u]=R;
if(L==R){
id[L]=u;
return ;
}
ll mid=(L+R)/2;
B(u*2,L,mid),B(u*2+1,mid+1,R);
}
void build(){B(1,1,n);}
void update(ll u){
if(!u)return ;
tr[u]=max(tr[u*2],tr[u*2+1]);
update(u/2);
}
void change(ll x,ll val){tr[id[x]]=val;update(id[x]/2);}
ll Q(ll u,ll L,ll R){
if(l[u]>=L&&r[u]<=R)return tr[u];
if(l[u]>R||r[u]<L)return 0;
return max(Q(u*2,L,R),Q(u*2+1,L,R));
}
ll query(ll L,ll R){if(L>R)return 0LL;return Q(1,L,R);}
}r;
bool ans[N];
ll ls[4*N],rs[4*N];
vector<ll> e[4*N];
void build(ll u,ll L,ll R){
ls[u]=L,rs[u]=R;
if(L==R)return ;
ll mid=(L+R)/2;
build(u*2,L,mid),build(u*2+1,mid+1,R);
}
void add(ll u,ll L,ll R,ll id){
if(ls[u]>=L&&rs[u]<=R){
e[u].push_back(id);
return ;
}
if(ls[u]>R||rs[u]<L)return ;
add(u*2,L,R,id),add(u*2+1,L,R,id);
}
stack<pair<ll,ll> > lst,rst;
void dfs(ll u,ll sizl,ll sizr){
bool fl=1;
for(auto i:e[u]){
ll mi=l.query(x[i],y[i]-1),ma=r.query(x[i]+1,y[i]);
if(mi>=x[i]&&ma<=y[i]){
if(l.query(y[i],y[i])>x[i])lst.push(make_pair(y[i],l.query(y[i],y[i]))),l.change(y[i],x[i]);
if(r.query(x[i],x[i])<y[i])rst.push(make_pair(x[i],r.query(x[i],x[i]))),r.change(x[i],y[i]);
}else{
fl=0;
break;
}
}
if(ls[u]==rs[u]){
if(fl)ans[ls[u]]=1;
while(lst.size()-sizl){
l.change(lst.top().first,lst.top().second);
lst.pop();
}
while(rst.size()-sizr){
r.change(rst.top().first,rst.top().second);
rst.pop();
}
return ;
}
if(fl)dfs(u*2,lst.size(),rst.size()),dfs(u*2+1,lst.size(),rst.size());
while(lst.size()-sizl){
l.change(lst.top().first,lst.top().second);
lst.pop();
}
while(rst.size()-sizr){
r.change(rst.top().first,rst.top().second);
rst.pop();
}
}
ll vis[N];
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>q;
build(1,1,q);
for(int i=1;i<=q;i++){
ll c;
cin>>c;
if(c==1)cin>>x[i]>>y[i];
else{
ll id;
cin>>id;
vis[id]=1;
add(1,id,i-1,id);
}
}
for(int i=1;i<=q;i++)if(x[i]&&!vis[i])add(1,i,n,i);
l.build(),r.build();
dfs(1,0,0);
for(int i=1;i<=q;i++){
if(ans[i])cout<<"yes\n";
else cout<<"no\n";
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...