We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.
#include<algorithm>#include<cstdio>#include<cstdint>#include<set>usingnamespacestd;#define FOR(i, a, b) for (int i = (a); i < (b); i++)#define REP(i, n) for (int i = 0; i < (n); i++)intri(){intx;scanf("%d",&x);returnx;}constintN=50000,NN=(N+63)/64;chara[N+1];typedefuint64_tu64;u64rev(u64x){x=(x&0xaaaaaaaaaaaaaaaaull)>>1|(x&0x5555555555555555ull)<<1;x=(x&0xccccccccccccccccull)>>2|(x&0x3333333333333333ull)<<2;x=(x&0xf0f0f0f0f0f0f0f0ull)>>4|(x&0x0f0f0f0f0f0f0f0full)<<4;x=(x&0xff00ff00ff00ff00ull)>>8|(x&0x00ff00ff00ff00ffull)<<8;x=(x&0xffff0000ffff0000ull)>>16|(x&0x0000ffff0000ffffull)<<16;returnx>>32|x<<32;}structBitSet{u64a[NN];BitSet(){clear();}voidclear(){fill_n(a,NN,0);}voidflip(inti){a[i>>6]^=1ull<<(i&63);}intget(inti)const{returna[i>>6]>>(i&63)&1;}voidset(inti,intv){if(get(i)!=v)flip(i);}voidword(inti,u64w){intj=i>>6;a[j]|=w<<(i&63);i+=63;j=i>>6;if(j<NN)a[j]|=w>>63-(i&63);}BitSetshr(inti){BitSetret;into=i&63,shift=i/64;if(!o)REP(i,NN-shift)ret.a[i]=a[i+shift];else{REP(i,NN-shift-1)ret.a[i]=a[i+shift]>>o|a[i+shift+1]<<64-o;ret.a[NN-shift-1]=a[NN-1]>>o;}returnret;}voidfill(intl,intr,intv){for(inti=l;i<r;)if(i&63||i+63>=r){set(i,v);i++;}else{a[i>>6]=v?-1ull:0;i+=64;}}voidcopy(constBitSet&o,intl,intr,intto){intshift=to-l;for(inti=l;i<r;)if(i&63||i+63>=r){set(i+shift,o.get(i));i++;}else{word(i+shift,o.a[i>>6]);i+=64;}}voidreverse(intl,intr){BitSett=*this;fill(l,r,0);for(inti=l;i<r;)if(i&63||i+63>=r){set(r-1-(i-l),t.get(i));i++;}else{word(r-64-(i-l),rev(t.a[i>>6]));i+=64;}}BitSetoperator^(constBitSet&o)const{BitSetret;REP(i,NN)ret.a[i]=a[i]^o.a[i];returnret;}};intmain(){intn=ri();BitSetb;scanf("%s",a);REP(i,n)if(a[i]=='b')b.flip(i);for(intm=ri();m--;){charop;scanf(" %c",&op);intx=ri()-1,y=ri();switch(op){case'C':{scanf(" %c",&op);b.fill(x,y,op-'a');break;}case'R':b.reverse(x,y);break;case'W':FOR(i,x,y)a[i-x]='a'+b.get(i);a[y-x]='\0';puts(a);break;case'S':{intxx=ri()-1,yy=ri();BitSett=b;b.fill(x,yy,0);b.copy(t,x,y,yy-(y-x));b.copy(t,y,xx,x+(yy-xx));b.copy(t,xx,yy,x);break;}case'H':{y--;if(x>y)swap(x,y);intz=ri(),pop=0;BitSett=b^b.shr(y-x);for(inti=x;i<x+z;)if(i&63||i+63>=x+z)pop+=t.get(i++);else{pop+=__builtin_popcountll(t.a[i>>6]);i+=64;}printf("%d\n",pop);break;}}}}
Cookie support is required to access HackerRank
Seems like cookies are disabled on this browser, please enable them to open this website
Hamming Distance
You are viewing a single comment's thread. Return to all comments →
Solution C++