QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#869087 | #9727. Barkley III | Nana7 | WA | 0ms | 5712kb | C++20 | 3.0kb | 2025-01-24 22:59:51 | 2025-01-24 22:59:52 |
Judging History
answer
#include<bits/stdc++.h>
#define ll long long
#define int long long
#define lson (k<<1)
#define rson (k<<1|1)
#define mid (l+r>>1)
#define int long long
#define I inline
using namespace std;
const long long M = (1ll<<63)-1;
const int N = 1000100;
struct node {
int tag,sum,msk;
}tr[N<<2];
int n,q,a[N],pw[64];
I void acc(int l,int r,int k,int v) {
tr[k].sum&=v;
tr[k].tag&=v;
if(l==r) tr[k].msk=M-tr[k].sum;
else tr[k].msk&=v;
}
I void pushdown(int l,int r,int k) {
if(tr[k].tag==0) return;
acc(l,mid,lson,tr[k].tag);
acc(mid+1,r,rson,tr[k].tag);
tr[k].tag=0;
}
I void update(int k) {
tr[k].sum=tr[lson].sum&tr[rson].sum;
tr[k].msk=(tr[lson].msk&tr[rson].sum)|(tr[rson].msk&tr[lson].sum);
}
void build(int l,int r,int k) {
if(l==r) {
tr[k].sum=a[l];
tr[k].msk=M-a[l];
return ;
}
build(l,mid,lson);
build(mid+1,r,rson);
update(k);
}
void change(int l,int r,int ps,int v,int k) {
if(l==r) {
tr[k].sum=v;
tr[k].tag=v;
tr[k].msk=M-v;
return ;
}
pushdown(l,r,k);
if(ps<=mid) change(l,mid,ps,v,lson);
else change(mid+1,r,ps,v,rson);
update(k);
}
void cover(int l,int r,int nl,int nr,int v,int k) {
if(l>=nl&&r<=nr) {
acc(l,r,k,v);
return ;
}
pushdown(l,r,k);
if(nl<=mid) cover(l,mid,nl,nr,v,lson);
if(nr>mid) cover(mid+1,r,nl,nr,v,rson);
update(k);
}
node query(int l,int r,int nl,int nr,int k) {
if(l>=nl&&r<=nr) {
return tr[k];
}
pushdown(l,r,k);
if(nl<=mid&&nr>mid) {
node n1=query(l,mid,nl,nr,lson),n2=query(mid+1,r,nl,nr,rson);
node ret; ret.sum=n1.sum&n2.sum; ret.msk=(n1.sum&n2.msk)|(n1.msk&n2.sum);
return ret;
}
else if(nl<=mid) return query(l,mid,nl,nr,lson);
else if(nr>mid) return query(mid+1,r,nl,nr,rson);
}
int findps(int l,int r,int lpos,int k,int v) {
if(tr[k].sum&v) return 0;
if(l==r) return l;
pushdown(l,r,k);
if(l>=lpos) {
if(tr[lson].sum&v) return findps(mid+1,r,lpos,rson,v);
else return findps(l,mid,lpos,lson,v);
} else if(mid<lpos) {
return findps(mid+1,r,lpos,rson,v);
} else {
int mk=findps(l,mid,lpos,lson,v);
if(mk) return mk;
else return findps(mid+1,r,lpos,rson,v);
}
}
I void solve() {
cin>>n>>q;
for(int i=1;i<=n;++i) cin>>a[i];
build(1,n,1);
for(int i=1;i<=q;++i) {
int o; cin>>o;
if(o==1) {
int l,r,x; cin>>l>>r>>x;
cover(1,n,l,r,x,1);
} else if(o==2) {
int s,x; cin>>s>>x;
change(1,n,s,x,1);
} else {
int l,r; cin>>l>>r;
if(l==r) {
cout<<0<<endl;
continue;
}
auto [tag,sum,msk]=query(1,n,l,r,1);
if(!msk) {
cout<<sum<<endl;
} else {
for(int i=62;i>=0;--i) {
if(msk&pw[i]){
msk&=pw[i];
break;
}
}
int ps=findps(1,n,l,1,msk),ans=M;
if(ps-1>=l) ans&=query(1,n,l,ps-1,1).sum;
if(ps+1<=r) ans&=query(1,n,ps+1,r,1).sum;
cout<<ans<<endl;
}
}
}
}
signed main()
{
//cout<<M<<endl;
{
pw[0]=1;
for(int i=1;i<=63;++i) pw[i]=pw[i-1]<<1;
}
solve();
}
/*
5 9
7 7 7 6 7
3 1 5
2 1 3
3 1 5
3 1 3
1 1 2 3
3 1 3
2 2 8
3 1 3
3 1 2
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 5640kb
input:
5 9 7 7 7 6 7 3 1 5 2 1 3 3 1 5 3 1 3 1 1 2 3 3 1 3 2 2 8 3 1 3 3 1 2
output:
7 6 7 3 3 8
result:
ok 6 lines
Test #2:
score: 0
Accepted
time: 0ms
memory: 5712kb
input:
10 10 6760061359215711796 1568091718842717482 1568091718842717482 1568091718842717482 5232472783634052627 8795942500783873690 1568091718842717482 1568091718842717482 1568091718842717482 1568091718842717482 1 3 5 7587422031989082829 3 6 10 1 7 8 5197616143400216932 2 4 2518604563805514908 2 2 4533959...
output:
1568091718842717482 35184908959744 176025477579040 8795942500783873690
result:
ok 4 lines
Test #3:
score: -100
Wrong Answer
time: 0ms
memory: 5708kb
input:
100 100 4263579105072360993 4263579105072360993 4263579105072360993 4263579105072360993 4263579105072360993 4263579105072360993 4263579105072360993 4263579105072360993 4263579105072360993 625967318191814868 4263579105072360993 4263579105072360993 4263579105072360993 4263579105072360993 4263579105072...
output:
576531121047601152 1 576460752303423488 4263579105072360993 1306043896232411137 4263579105072360993 576531121047601152 4263579105072360993 70368811286528 1153488865559840256 4263579105072360993 1730020640668059136 4263579105072360993 2459528355154757633 4263579105072360993 2251799813685249 246213426...
result:
wrong answer 8th lines differ - expected: '633397148123136', found: '4263579105072360993'