QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#811746 | #9727. Barkley III | Proaes | Compile Error | / | / | C++20 | 2.7kb | 2024-12-13 00:21:52 | 2024-12-13 00:21:53 |
Judging History
你现在查看的是最新测评结果
- [2025-01-13 03:55:43]
- hack成功,自动添加数据
- (/hack/1447)
- [2024-12-13 00:21:53]
- 评测
- 测评结果:Compile Error
- 用时:0ms
- 内存:0kb
- [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;
}
详细
answer.code: In function ‘int main()’: answer.code:110:5: error: ‘ios’ has not been declared 110 | ios::sync_with_stdio(0); | ^~~