QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#281156 | #7765. Xor Master | songziyan | 20 | 393ms | 108772kb | C++14 | 3.4kb | 2023-12-09 22:30:25 | 2023-12-09 22:30:26 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define ull unsigned long long
const int N=8e5+5;
int n,q;
ull a[N],g[N];
struct basis{
ull s[70];
ull insert(ull x){
for(int i=63;i>=0;i--)if((x>>i)&1){
if(!s[i]){
for(int j=i-1;j>=0;j--)
if((x>>j)&1)x^=s[j];
s[i]=x;
for(int j=63;j>i;j--)
if((s[j]>>i)&1)s[j]^=x;
return x;
}
x^=s[i];
}
return 0;
}
ull qrymin(ull x){
for(int i=63;i>=0;i--)x=min(x,x^s[i]);
return x;
}
ull qrymax(ull x){
for(int i=63;i>=0;i--)x=max(x,x^s[i]);
return x;
}
}bas;
struct bit{
ull a[N];
void add(int x,ull v){
for(;x<=n;x+=(x&(-x)))
a[x]^=v;
}
ull sum(int x){
ull res=0;
for(;x;x-=(x&(-x)))
res^=a[x];
return res;
}
void init(){
memset(a,0,sizeof(a));
}
}c;
struct tree{
#define lc x<<1
#define rc x<<1|1
ull tmp[N<<4],*p=tmp;
ull *tr[N<<2],tag[N<<2];//,sum[N<<2];
int tot[N<<2],len[N<<2];
void pushup(int x){
ull k=0;
for(int i=0;i<tot[x];i++){
tr[x][i]=tr[lc][i]^tr[rc][i]^k;
k=(tr[lc][i]&tr[rc][i])|(tr[lc][i]&k)|(tr[rc][i]&k);
}
//sum[x]=sum[lc]+sum[rc];
}
void addtag(int x,ull v){
tag[x]^=v;
//sum[x]=0;
ull k=0;
for(int i=0;i<tot[x];i++){
ull t=k;
if((len[x]>>i)&1){
k=k&(tr[x][i]&v);
tr[x][i]=tr[x][i]^t^v;
}else{
k=k|(tr[x][i]&v);
tr[x][i]=tr[x][i]^t;
}
//sum[x]+=(tr[x][i]<<i);
}
}
void pushdown(int x){
if(tag[x]){
addtag(lc,tag[x]);
addtag(rc,tag[x]);
tag[x]=0;
}
}
void build(int x,int l,int r){
tag[x]=0;
len[x]=r-l+1;
while((1<<tot[x])<=(r-l+1))++tot[x];
tr[x]=p;p+=tot[x]+5;
if(l==r){
tr[x][0]=/*sum[x]=*/bas.qrymax(g[l]);
//printf("%llu ",tr[x][0]);
return;
}
int mid=(l+r)>>1;
build(lc,l,mid);
build(rc,mid+1,r);
pushup(x);
}
void upd(int x,int l,int r,int ql,int qr,ull v){
if(!v)return;
if(ql<=l&&r<=qr)return addtag(x,v);
pushdown(x);
int mid=(l+r)>>1;
if(ql<=mid)upd(lc,l,mid,ql,qr,v);
if(qr>mid)upd(rc,mid+1,r,ql,qr,v);
pushup(x);
}
ull qry(int x,int l,int r,int ql,int qr){
if(ql<=l&&r<=qr){
ull res=0;
for(int i=0;i<tot[x];i++)
res+=(tr[x][i]<<i);
return res;
}
pushdown(x);
int mid=(l+r)>>1;
ull res=0;
if(ql<=mid)res+=qry(lc,l,mid,ql,qr);
if(qr>mid)res+=qry(rc,mid+1,r,ql,qr);
return res;
}
void rbuild(int x,int l,int r){
tag[x]=0;
if(l==r){
tr[x][0]=/*sum[x]=*/bas.qrymax(g[l]);
return;
}
int mid=(l+r)>>1;
rbuild(lc,l,mid);
rbuild(rc,mid+1,r);
pushup(x);
}
}T;
void init(){
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++)
scanf("%llu",&a[i]);
for(int i=1;i<=n;i++){
g[i]=g[i-1]^a[i];
c.add(i,a[i]);
}
T.build(1,1,n);
}
void opt1(int x,ull v){
a[x]^=v;
c.add(x,v);
T.upd(1,1,n,x,n,bas.qrymin(v));
}
void opt2(ull v){
if(bas.insert(v)){
c.init();
for(int i=1;i<=n;i++){
g[i]=g[i-1]^a[i];
c.add(i,a[i]);
}
T.rbuild(1,1,n);
}
}
ull opt3(int ql,int qr){
ull pre=c.sum(ql-1);
ull v=bas.qrymin(pre);
T.upd(1,1,n,ql,qr,v);
ull ans=T.qry(1,1,n,ql,qr);
T.upd(1,1,n,ql,qr,v);
return ans;
}
signed main(){
init();
//printf("%llu\n",T.qry(1,1,n,1,2));
while(q--){
int op,x,l,r;ull v;
scanf("%d",&op);
if(op==1){
scanf("%d%llu",&x,&v);
opt1(x,v);
}
if(op==2){
scanf("%llu",&x);
opt2(x);
}
if(op==3){
scanf("%d%d",&l,&r);
printf("%llu\n",opt3(l,r));
}
}
return 0;
}
/*
*/
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 10
Accepted
time: 6ms
memory: 19768kb
input:
2000 2000 1860495733 462603674 3739839441 759356520 47330263 550811730 2301200895 989240351 2499503801 2624225494 2123076812 1180966826 238739434 488666688 784742950 2583466952 4111371941 2335988605 2583741355 933716686 1644403538 1970423306 304500250 905101643 1814942168 1136358764 88729799 1577263...
output:
867006634793 3418049036989 1658469159497 794670034691 239792547603 1587489101990 592222190840 1343829229567 971235609706 571701308760 1219913933321 588622962923 2129364200509 1007100395808 3134493164996 3145027621038 2599298085956 1729302186341 837940435945 242569415869 2908005634977 1692554597386 1...
result:
ok 1001 lines
Test #2:
score: -10
Wrong Answer
time: 7ms
memory: 20420kb
input:
2000 2000 836488286 497338588 1858847699 3099907357 1601878363 409027819 646677017 3314413779 3312383261 4245381929 661740170 2016795844 1226219370 1347593623 4008424282 2941543248 1331853899 3217984002 3651447350 1223595274 1733763258 2829453991 3934056384 2556266950 326379115 3240694642 2405972228...
output:
1042755994488 3566460727022 18446740745952826057 18446743959848809881 18446740509895907115 18446743987370155594 18446741443559482131 18446743635423780987 18446742165024536324 18446741311854446040 18446743813645612656 18446741553430740551 18446743204154229241 18446743171666784844 18446743152320260326...
result:
wrong answer 3rd lines differ - expected: '4896344756993', found: '18446740745952826057'
Subtask #2:
score: 10
Accepted
Test #5:
score: 10
Accepted
time: 377ms
memory: 107940kb
input:
500000 100000 12261386944926786495 7846697792998647383 16622924885320463714 170129022271213944 12625257523700625864 7684671687986103560 11532026873918423068 1131776055566669037 8263146651412710501 17872572061246021001 5017109039248728310 11088626167542318645 13810119722795416818 10928315716094262229...
output:
12337138966997790840 11593856511006775316 5653988472748567965 6281173414355612100 18027435777450732541 2903343914316621940 9422461876307420631 76690753587353877 798850376670823348 10137130634921141648 13914431888234873359 10192090671035653185 11569745711967074397 12303071505845046803 637460082558284...
result:
ok 100000 lines
Test #6:
score: 0
Accepted
time: 382ms
memory: 107428kb
input:
500000 100000 2401807279819923664 4864040262566555379 393321053390449880 4788516535106180899 16341781931596217301 5366313714490813917 8733414387771039303 3622005358527808423 6656486662369859494 5727971807004402567 1871899173840936696 6806964236526608687 9140220291662959979 14105070848567411114 13861...
output:
18076341197627185142 4362827643496160302 16458517423472358447 7372070120382179734 17124352181386485858 8256987425157370833 8991430708104334950 13354417317098667510 4820384361450081237 8337869045811888683 11434789480214872846 5853099668394635414 9921910794735540586 13822588195484916645 18016508410594...
result:
ok 100000 lines
Test #7:
score: 0
Accepted
time: 377ms
memory: 106000kb
input:
500000 100000 9957529645926737849 10057149949999768336 6838946770748251219 6896066705128063220 3993100902834799891 5323425649684667980 3760708431776774082 3860748130105828748 14761382969249249840 10936521060468005355 1875820140813348262 13560865738437472453 4392029878717344116 2698482518092628941 31...
output:
9038317550207043746 16505746615738128902 16113222356056267326 5313340055150519531 12389196059377873793 12520312844070623593 6947643770664034055 16237639987742643453 6175352167577923638 1984497765972065282 6098790840848813956 17485586471573206926 17056253743695232969 18412276874594508522 124977750289...
result:
ok 100000 lines
Test #8:
score: 0
Accepted
time: 393ms
memory: 103332kb
input:
500000 100000 5166592157828364085 8315993781810560457 7015464858242879867 9462293143600642166 9978096691486311966 5694373056023755415 7815690096691826513 1103275933683839552 5895542891044134509 11894732487323444487 2505393836307639840 10093788754137760497 4707584458765376704 8307188898020086549 9376...
output:
15180522216256224578 9392124937659601223 3731090297266184457 4088700438599152597 12141047238741589627 13690831665706691537 6137001830770875119 7710540224612738933 1127395840873126729 2547428643630768226 11276243151896249930 17424485450812448884 7349818962346687887 5470805592498440155 175038017689994...
result:
ok 100000 lines
Test #9:
score: 0
Accepted
time: 373ms
memory: 108712kb
input:
500000 100000 7998967471673371582 10130114419746398664 3551104684935464564 16685912987850328972 15511627867796069361 14936250795135295380 4459893621649123553 231042979002434189 12012936660604067430 2904992764724124790 11143303174224955423 14451025218833269546 1754517928855676235 7134560987488737406 ...
output:
1110650069515649932 5912382191329152172 621049367733791305 16761108311614751314 15914665672331903790 14220790622677061421 5631638233891908584 7684804426465509033 14144814832404731330 16097253704711336991 2968280359984267989 5346852515106429646 3425570440230240081 2224629419443001294 1831513998879473...
result:
ok 100000 lines
Subtask #3:
score: 10
Accepted
Dependency #2:
100%
Accepted
Test #10:
score: 10
Accepted
time: 331ms
memory: 108180kb
input:
500000 100000 200191340929944401 12656615506596552505 16633050881913566440 11502837812276521947 10790959349780699890 16488127686621042658 4109113967985622378 17555775201632271905 1290245304295682315 7179623333690333199 15269467703158069058 941138697396034626 8224500868035537418 7455271978400711386 1...
output:
758501887551594031 1665604119059722056 403038032845801033 2324426477153882520 8055890568941724428 3165761541860967523 17272957383116991360 4023594250185344192 12035722184792491656 14796144364719289182 18094402499079398644 14024860765118923832 13168296182978650514 5318260330436217687 1836042410212902...
result:
ok 49934 lines
Test #11:
score: 0
Accepted
time: 316ms
memory: 108772kb
input:
500000 100000 13170518242316222812 3993572340142092624 6362404086157115319 3858399708965710812 8961996594949541351 11897793274190138151 18372376119325653470 8899192512730530452 16936622003105361381 4176041488787970447 15333929073029479431 12587291663601038172 17768574640602100357 757050460127913575 ...
output:
18393533203330024709 11419195311909553249 13267924093322071218 12624207086895283261 14838016103735338743 757708799946554833 17401716111261519539 1772247087484709488 11619264374712289726 5867468046221732048 1965616567621397600 11790657860176791568 10289227627996702542 3863290569509103201 556129394454...
result:
ok 49942 lines
Test #12:
score: 0
Accepted
time: 331ms
memory: 103304kb
input:
500000 100000 14013123058474792443 17380295510751871484 4391236104741829344 4474074558632230099 229289596692916386 11238546802146089082 13965500082744804132 12524352258159473118 16841501492454558784 15601892162641642566 16137385790677371843 8205495132513127632 11561586484992685598 566122397057544199...
output:
7031039326587896354 14661811013975410284 16240260737346967588 7874709777600112534 13804416649140060665 14794814253793629345 12090966385144473060 784240474000883516 930779002182644047 17896000074965102927 4462442469078545813 6371801885853929018 9035669406688537439 1489803456266057014 6087886399205955...
result:
ok 49736 lines
Test #13:
score: 0
Accepted
time: 342ms
memory: 108744kb
input:
500000 100000 1882346254669424062 200513983589187534 14062485402391623039 3777613033081334101 13033842303367596289 3626596003519225428 8457289795126393164 18364335508736323859 10106153085431007986 14646620798388473945 12828088329277406604 13954877392652660118 14014733841170899044 2499643594572993494...
output:
1712951643591180633 7241902207889498541 17179548838667092452 12870366904122515317 10199471271621752482 1619111568983183159 14174615575599173790 4108423440407451406 10135522623902484443 11398041912548215279 8720364420946274353 8248524280982145776 11670180256969703791 3668077164552092914 1668228997062...
result:
ok 50057 lines
Test #14:
score: 0
Accepted
time: 321ms
memory: 107492kb
input:
500000 100000 18064141644442484291 16119258479983672073 2285378485483177518 421635135977821033 310342638320775224 2179689329624656298 6404812915614914266 16608991116405159641 18292417609858854531 5077382020581152609 1936056909076025620 4336563808581780621 11584612539316202995 3053500398504616766 132...
output:
18419752636350298336 2134778665397258019 9322958175108299025 16517475821565450651 9666691823705947328 8080027294085776193 12103868154223633817 17641911873846795293 12794638427444888905 8741730158940400730 14718623375972993113 9835997529279753790 9066724887737953706 16054283343213958559 1335192712339...
result:
ok 49826 lines
Subtask #4:
score: 0
Wrong Answer
Test #15:
score: 0
Wrong Answer
time: 241ms
memory: 43424kb
input:
100000 100000 860905160 3192911636 290327446 2020707113 959258245 454185039 421895589 1070265496 2218913641 1684685660 1206723673 2606734467 4247254571 3341954386 3805299640 1702270353 2472053741 2816060613 1307901348 2702949728 879391505 884661815 330738731 1575749344 1239158446 2099693858 67466644...
output:
208755389215975 125497785366837 162446748431411 63166834945113 33018804920229 89343160639243 36805816758195 40790494641758 13928126471189 267168502433672 191989403472418 276350936750564 11189666657474 133862444125402 92684260245650 179275392898572 46159208957881 232612971657325 184946588056252 11022...
result:
wrong answer 95th lines differ - expected: '258562763363052', found: '18446657840664127451'
Subtask #5:
score: 0
Skipped
Dependency #4:
0%
Subtask #6:
score: 0
Skipped
Dependency #1:
0%
Subtask #7:
score: 0
Skipped
Dependency #1:
0%