QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#811746#9727. Barkley IIIProaesCompile Error//C++202.7kb2024-12-13 00:21:522024-12-13 00:21:53

Judging History

你现在查看的是最新测评结果

  • [2025-01-13 03:55:43]
  • hack成功,自动添加数据
  • (/hack/1447)
  • [2024-12-13 00:21:53]
  • 评测
  • [2024-12-13 00:21:52]
  • 提交

answer

#include<iostream>
#include<vector>
#include<algorithm>
#include<iterator>
#include<set>
using std::cin,std::cout;
using ull=unsigned long long;
int n,q,book[4000010];
ull a[1000010],s[4000010],t[4000010],tag[4000010];
void pushup(int x,int ls,int rs){
	s[x]=s[ls]&s[rs],t[x]=(t[ls]&s[rs])|(t[rs]&s[ls]);
}
void addtag(int x,ull v){
	tag[x]&=v,s[x]&=v;
	if(!book[x]) t[x]&=v;
}
void pushdown(int x,int ls,int rs){
	if(tag[x]!=~0ull) addtag(ls,tag[x]),addtag(rs,tag[x]),tag[x]=~0ull;
}
void build(int x=1,int l=1,int r=n){
	tag[x]=~0ull;
	if(l==r){
		book[x]=1;
		s[x]=a[l],t[x]=~0ull;
		return;
	}
	int mid=(l+r)>>1,ls=x<<1,rs=x<<1|1;
	build(ls,l,mid),build(rs,mid+1,r);
	pushup(x,ls,rs);
}
void update(int p,ull v,int x=1,int l=1,int r=n){
	if(l==r) return s[x]=v,void();
	int mid=(l+r)>>1,ls=x<<1,rs=x<<1|1;
	pushdown(x,ls,rs);
	if(p<=mid) update(p,v,ls,l,mid);
	else update(p,v,rs,mid+1,r);
	pushup(x,ls,rs);
}
void upd(int pl,int pr,ull v,int x=1,int l=1,int r=n){
	if(l==pl&&r==pr) return addtag(x,v);
	int mid=(l+r)>>1,ls=x<<1,rs=x<<1|1;
	pushdown(x,ls,rs);
	if(pr<=mid) upd(pl,pr,v,ls,l,mid);
	else if(pl>mid) upd(pl,pr,v,rs,mid+1,r);
	else upd(pl,mid,v,ls,l,mid),upd(mid+1,pr,v,rs,mid+1,r);
	pushup(x,ls,rs);
}
std::pair<ull,ull> query(int pl,int pr,int x=1,int l=1,int r=n){
	if(l==pl&&r==pr) return std::pair(s[x],t[x]);
	int mid=(l+r)>>1,ls=x<<1,rs=x<<1|1;
	pushdown(x,ls,rs);
	if(pr<=mid) return query(pl,pr,ls,l,mid);
	else if(pl>mid) return query(pl,pr,rs,mid+1,r);
	else{
		auto [s1,t1]=query(pl,mid,ls,l,mid);
		auto [s2,t2]=query(mid+1,pr,rs,mid+1,r);
		return std::pair(s1&s2,(t1&s2)|(t2&s1));
	}
}
int get(int pl,int pr,int w,int x=1,int l=1,int r=n){
	if(s[x]>>w&1) return 0;
	if(l==r) return l;
	int mid=(l+r)>>1,ls=x<<1,rs=x<<1|1;
	pushdown(x,ls,rs);
	if(pr<=mid) return get(pl,pr,w,ls,l,mid);
	else if(pl>mid) return get(pl,pr,w,rs,mid+1,r);
	else{
		int u=get(pl,mid,w,ls,l,mid);
		if(u) return u;
		return get(mid+1,pr,w,rs,mid+1,r);
	}
}
void solve(){
	cin>>n>>q;
	for(int i=1;i<=n;i++) cin>>a[i];
	build();
	while(q--){
		int op;
		cin>>op;
		if(op==1){
			int l,r;
			ull x;
			cin>>l>>r>>x;
			upd(l,r,x);
		}else if(op==2){
			int p;
			ull x;
			cin>>p>>x;
			update(p,x);
		}else{
			int l,r;
			cin>>l>>r;
			auto [s,t]=query(l,r);
			if(s==t) cout<<s<<'\n';
			else{
				for(int i=63;~i;i--) if((t>>i&1)&&!(s>>i&1)){
					int u=get(l,r,i);
					ull ans=~0ull;
					if(u!=l) ans&=query(l,u-1).first;
					if(u!=r) ans&=query(u+1,r).first;
					cout<<ans<<'\n';
					break;
				}
			}
		}
	}
}
int main(){
    cin.tie(0);cout.tie(0);
    ios::sync_with_stdio(0);
        solve();
	return 0;
}

Details

answer.code: In function ‘int main()’:
answer.code:110:5: error: ‘ios’ has not been declared
  110 |     ios::sync_with_stdio(0);
      |     ^~~