请问这题O(nlognlogn)复杂度为啥会T
  • 板块灌水区
  • 楼主mayike
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/26 18:53
  • 上次更新2024/4/26 19:56:40
查看原帖
请问这题O(nlognlogn)复杂度为啥会T
1039406
mayike楼主2024/4/26 18:53

题目:CF1641C

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,Q;
struct sb{int len,s,mx;}tr[N<<2];
void js(int p,int l,int r){
	tr[p]={r-l+1,0,n+1};
	if(l==r)return;
	int mid=l+r>>1;
	js(p<<1,l,mid),js(p<<1|1,mid+1,r);
}
void pushdown(sb p,sb &l,sb &r){if(p.len==p.s)l.s=l.len,r.s=r.len;}
void dan(int p,int l,int r,int s,int t){
	if(l<=s&&t<=r){tr[p].s=tr[p].len;return;}
	int mid=s+t>>1;
	pushdown(tr[p],tr[p<<1],tr[p<<1|1]);
	if(l<=mid)dan(p<<1,l,r,s,mid);
	if(mid<r)dan(p<<1|1,l,r,mid+1,t);
	tr[p].s=tr[p<<1].s+tr[p<<1|1].s;
}
void find(int p,int l,int r,int s,int t){
	if(s==t){tr[p].mx=min(tr[p].mx,r);return;}
	int mid=s+t>>1;
	if(l<=mid)find(p<<1,l,r,s,mid);
	else find(p<<1|1,l,r,mid+1,t);
	tr[p].mx=min(tr[p<<1].mx,tr[p<<1|1].mx);
}
sb pushup(sb l,sb r){return {l.len+r.len,l.s+r.s,n+1};}
sb ask(int p,int l,int r,int s,int t){
	if(t<l||r<s)return {0,0,n+1};
	if(l<=s&&t<=r)return tr[p];
	int mid=s+t>>1;
	pushdown(tr[p],tr[p<<1],tr[p<<1|1]);
	return pushup(ask(p<<1,l,r,s,mid),ask(p<<1|1,l,r,mid+1,t));
}
int sc(int p,int l,int r,int s,int t){
	if(t<l||r<s)return n+1;
	if(l<=s&&t<=r)return tr[p].mx;
	int mid=s+t>>1;
	pushdown(tr[p],tr[p<<1],tr[p<<1|1]);
	return min(sc(p<<1,l,r,s,mid),sc(p<<1|1,l,r,mid+1,t));
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>Q,js(1,1,n);
	while(Q--){
		int op,l,r,x;
		cin>>op;
		if(op==0){
			cin>>l>>r>>x;
			if(x==0)dan(1,l,r,1,n);
			else find(1,l,r,1,n);
		}
		else{
			cin>>x;
			int l=1,r=x-1,mid,L,R;sb s=ask(1,x,x,1,n);
			if(s.s==s.len){cout<<"NO\n";continue;}
			while(l<=r){
				mid=l+r>>1,s=ask(1,mid,x-1,1,n);
				if(s.len==s.s)r=mid-1;
				else l=mid+1;
			}L=l,l=x+1,r=n;
			while(l<=r){
				mid=l+r>>1,s=ask(1,x+1,mid,1,n);
				if(s.len==s.s)l=mid+1;
				else r=mid-1;
			}R=r;
			if(sc(1,L,x,1,n)<=R)cout<<"YES\n";
			else cout<<"N/A\n";
		}
	}
	return 0;
}//rt,做法是正确的
2024/4/26 18:53
加载中...