QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#563088 | #6656. 先人类的人类选别 | Elegia | AC ✓ | 732ms | 34636kb | C++23 | 6.8kb | 2024-09-14 02:30:30 | 2024-09-14 02:30:30 |
Judging History
answer
// std: nzhtl1477
#include<bits/stdc++.h>
#define F(i,l,r) for(int i=l;i<r;++i)
#define Fe(i,l,r) for(int i=l;i<=r;++i)
#define Fer(i,l,r) for(int i=l;i>=r;--i)
#if 0
#define pr(...) fprintf(stderr,__VA_ARGS__)
#else
#define pr(...) void(0)
#endif
typedef long long i64;
const int maxn=1e6,maxm=1e6,maxv=1e3,N=maxn+10,M=maxm+10;
template<class T>
void alloc(T *&p,int sz){
p=new T[sz]();
}
struct Void{
char _[0];
template<class T>
friend void operator*=(T &,Void){}
friend Void operator+(Void,Void){return Void();}
};
template<class D=Void,class M=Void>
struct MSegTree{
struct Node{
D d;
M m;
void app(const M &t){
d*=t;
m*=t;
}
void up(const Node &a,const Node &b){
d=a.d+b.d;
d*=m;
}
}*tr;
int mx;
int n;
void in(int x){}
void in(int l,int r){}
void alloc(int n){
for(mx=1;mx<n+2;mx<<=1);
::alloc(tr,mx+n+3);
this->n=n;
}
template<class T>
void init(int n,T *d0){
alloc(n);
Fe(i,1,n)tr[mx+i].d=d0[i];
range_update(1,n);
}
D &operator[](int x){
in(x);
return tr[mx+x].d;
}
void range_update(int l,int r){
in(l),in(r);
l+=mx,r+=mx;
for(l>>=1,r>>=1;l<r;l>>=1,r>>=1){
Fe(x,l,r)up(x);
}
for(;l;l>>=1)up(l);
}
void up(int x){
tr[x].up(tr[x*2],tr[x*2+1]);
}
void add(int x,const D &y){//M=Void
in(x);
for(x+=mx;x;x>>=1)tr[x].d=tr[x].d+y;;
}
void update(const M &t){
tr[1].app(t);
}
template<class T>
void update(int x,T y){
in(x);
for(tr[x+=mx].d=y;x>1;up(x>>=1));
}
void update(int l,int r,const M &t){
in(l),in(r);
for(l+=mx-1,r+=mx+1;l^r^1;up(l>>=1),up(r>>=1)){
if(~l&1)tr[l+1].app(t);
if(r&1)tr[r-1].app(t);
}
for(;l>1;up(l>>=1));
}
void update_suffix(int x,const M &t){
in(x);
for(x+=mx-1;x>1;up(x>>=1)){
if(~x&1)tr[x+1].app(t);
}
}
D query(){
return tr[1].d;
}
D query(int l,int r){
in(l),in(r);
D a1,a2;
for(l+=mx-1,r+=mx+1;l^r^1;a1*=tr[l>>=1].m,a2*=tr[r>>=1].m){
if(~l&1)a1=a1+tr[l+1].d;
if(r&1)a2=tr[r-1].d+a2;
}
a1=a1+a2;
for(;l>1;a1*=tr[l>>=1].m);
return a1;
}
D query_prefix(int r){
in(r);
D a1;
for(r+=mx+1;r>1;r>>=1,a1*=tr[r].m){
if(r&1)a1=tr[r-1].d+a1;
}
return a1;
}
D query_suffix(int l){
in(l);
D a1;
for(l+=mx-1;l>1;l>>=1,a1*=tr[l].m){
if(~l&1)a1=a1+tr[l+1].d;
}
return a1;
}
void dn(int x){
tr[x*2].app(tr[x].m);
tr[x*2+1].app(tr[x].m);
tr[x].m=M();
}
void dna(int x){
in(x);
x+=mx;
for(int c=__builtin_ctz(mx);c>0;--c)dn(x>>c);
}
template<class T>
int bsearch_r(int x,T f){//M=Void
in(x);
for(x+=mx-1;;x>>=1){
if(~x&1){
if(f(tr[x+1].d))break;
}
}
for(++x;x<mx;){
x<<=1;
if(!f(tr[x].d))++x;
}
x-=mx;
return x-1;
}
template<class T>
int find_lm(T f){
int x=1;
while(x<mx){
dn(x);
x<<=1;
if(!f(tr[x].d))++x;
}
x-=mx;
return x;
}
};
template<class T>
struct BIT{
T *a;
int n;
void alloc(int n0){
n=n0;
::alloc(a,n+1);
}
void add(int x,T y){
assert(1<=x&&x<=n);
int _n=n;
for(;x<=_n;x+=x&-x)a[x]+=y;
}
T sum(int x){
assert(0<=x&&x<=n);
T s=0;
for(;x;x-=x&-x)s+=a[x];
return s;
}
void build(){
Fe(i,1,n){
int j=i+(i&-i);
if(j<=n)a[j]+=a[i];
}
}
};
namespace IO{
const int BUF_SZ=1<<16;
char ib[BUF_SZ+1],*ip=ib+BUF_SZ;
void ipre(int n){
int c=ib+BUF_SZ-ip;
if(c<n){
memcpy(ib,ip,c);
ip=ib;
fread(ib+c,1,BUF_SZ-c,stdin)[ib+c]=0;
}
}
template<class T>
T read(T L,T R){
ipre(100);
T x=0,f=1;
while(*ip<'0'||*ip>'9')if(*ip++=='-')f=-f;
while(*ip>='0'&&*ip<='9')x=x*10+*ip++-'0';
x*=f;
if(!(L<=x&&x<=R)){
std::cerr<<x<<" not in ["<<L<<","<<R<<"]\n";
exit(1);
}
return x;
}
char ob[BUF_SZ+1],*op=ob;
void opre(int n){
int c=ob+BUF_SZ-op;
if(c<n){
fwrite(ob,1,BUF_SZ-c,stdout);
op=ob;
}
}
template<class T>
void write(T x){
opre(100);
char ss[100],*sp=ss;
if(x<T(0))x=-x,*op++='-';
do *sp++=x%10+'0';while(x/=10);
while(sp!=ss)*op++=*--sp;
}
template<class T>
void write(T x,char c){
write(x);
*op++=c;
}
struct __{
__(){}
~__(){
fwrite(ob,1,op-ob,stdout);
}
}_;
};
using IO::read;
using IO::write;
int a[N];
const int inf=1e9;
bool is1[N],is2[N];
using std::min;
using std::max;
int n,m;
struct D1{
int x;
D1(int x0=inf):x(x0){}
};
struct M1{
int x;
M1(int x0=0):x(x0){}
};
D1 operator+(D1 a,D1 b){return D1(min(a.x,b.x));}
void operator*=(D1 &a,M1 b){a.x+=b.x;}
void operator*=(M1 &a,M1 b){a.x+=b.x;}
MSegTree<D1,M1> amnt;
MSegTree<D1> qmnt;
template<class T>
struct Sum{
T x;
Sum(T x0=0):x(x0){}
operator T(){return x;}
friend Sum operator+(Sum a,Sum b){return Sum(a.x+b.x);}
};
BIT<i64> qst,q1st;
BIT<int> q1xct;
MSegTree<Sum<int>> q1yct;
int qt(int i){
return q1xct.sum(i)-q1yct.query_suffix(a[i]).x;
}
i64 q1s(int i){
if(i>n)return 0;
int n1=q1yct.query().x-q1xct.sum(i-1);
if(!n1)return 0;
int y=q1yct.find_lm([&n1](Sum<int> d){
if(n1>d.x)return n1-=d.x,0;
return 1;
});
i64 s=0;
assert(q1yct[y]>=n1);
s+=i64(n1)*y;
if(y>1)s+=q1st.sum(y-1);
return s;
}
int main(){
n=read(1,maxn);
m=read(1,maxm);
Fe(i,1,n)a[i]=read(1,n);
int mx=inf;
Fe(i,1,n){
if(a[i]<=mx){
mx=a[i];
is1[i]=1;
}
}
mx=inf;
Fe(i,1,n){
if(a[i]<=mx&&!is1[i]){
mx=a[i];
is2[i]=1;
}
}
qst.alloc(n);
q1st.alloc(n);
qmnt.alloc(n+1);
q1xct.alloc(n);
q1yct.alloc(n);
Fe(i,1,n)if(!is1[i]){
qst.a[i]=a[i];
qmnt[i]=a[i];
}else{
q1st.a[a[i]]+=a[i];
q1xct.a[i]+=1;
q1yct[a[i]].x+=1;
}
qmnt[n+1]=0;
qst.build();
q1st.build();
qmnt.range_update(1,n+1);
q1xct.build();
q1yct.range_update(1,n);
amnt.alloc(n);
Fe(i,1,n)if(is2[i]){
amnt[i]=qt(i);
}
amnt.range_update(1,n);
Fe(_,1,m){
int y=read(1,n);
int l=read(1,n),r=read(l,n);
int y1=1e9;
pr("\ny=%d\n",y);
int y0=q1yct.find_lm([](Sum<int> d){return d.x;});
if(y>=y0){
q1yct.add(y,1);
q1st.add(y,y);
q1yct.add(y0,-1);
q1st.add(y0,-y0);
if(y>=qmnt.query().x){
int i0=qmnt.find_lm([y](D1 d){return y>=d.x;});
if(i0<=n)amnt.update_suffix(i0,-1);
}
mx=inf-1;
for(;amnt.query().x==0;){
int i=amnt.find_lm([](D1 d){return !d.x;});
if(i>n)break;
if(i>1)mx=min(mx,qmnt.query_prefix(i-1).x);
is2[i]=0;
is1[i]=1;
qst.add(i,-a[i]);
qmnt.update(i,inf);
amnt.dna(i);
amnt.update(i,inf);
q1xct.add(i,1);
q1yct.add(a[i],1);
q1st.add(a[i],a[i]);
for(;;){
i=qmnt.bsearch_r(i+1,[mx](D1 d){return mx>=d.x;})+1;
if(i>n||is2[i])break;
mx=a[i];
is2[i]=1;
amnt.dna(i);
amnt.update(i,qt(i));
}
}
}
i64 s=0;
s+=q1s(l)-q1s(r+1);
s+=qst.sum(r)-qst.sum(l-1);
write(s,'\n');
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 732ms
memory: 34160kb
input:
499998 499999 225823 463012 151183 217174 254116 87516 430524 123887 1361 369166 194997 386501 152639 163995 82309 151761 31404 226965 394185 101304 79621 99315 150936 156155 31208 399526 358496 220267 192773 347327 92807 441843 423834 173327 131913 369822 399380 107225 354942 357415 472293 22050 24...
output:
30690660976 47414891120 105487455953 22358372158 20975402746 6257771014 31201467488 115331181834 9124930293 7824102632 2146273518 51745314301 53146730142 23687230091 120607771274 1050423809 72818807434 38847698680 5378878564 27350934969 7121225405 11453494649 23342470451 58986381247 8361770541 35351...
result:
ok 499999 numbers
Test #2:
score: 0
Accepted
time: 700ms
memory: 32616kb
input:
499997 499998 337227 261334 260186 478031 461552 139402 19112 72167 275683 30137 218339 14400 89776 85755 56769 254059 264675 353757 498697 206831 204792 429587 477795 330852 438570 62026 275861 312245 75760 4469 384374 444618 285169 113560 147752 82400 402556 194854 104857 495285 29165 227680 45661...
output:
55556178075 38928407081 78923486861 43283234518 25650712801 28229461681 65900240569 47967520848 90661784500 27613845938 40947764302 24031914863 62841665071 25540879622 9362272779 46554873243 55143194477 72516594710 4246406354 86010703796 27623396436 17971314716 4854137293 29667895428 25929438490 301...
result:
ok 499998 numbers
Test #3:
score: 0
Accepted
time: 550ms
memory: 34236kb
input:
499995 499997 426379 492343 483649 372035 428954 412141 424967 380182 470956 376535 323087 294730 403943 379100 380403 497804 486163 416217 454988 464790 466867 468193 477096 407118 405359 389749 370075 365394 356611 348919 348179 346322 340696 339303 306353 240677 230311 246053 260237 269345 281365...
output:
89831822565 32628604147 74121602184 25858292656 75020010261 79400611926 75639582722 89497653965 50241170690 47190073210 42913203509 12355358812 64364472102 5975699508 108470104597 103203459693 51848061043 19096394194 96893341304 19840215385 8665210084 37203382396 6420315861 70111173030 36036761518 1...
result:
ok 499997 numbers
Test #4:
score: 0
Accepted
time: 712ms
memory: 34144kb
input:
499995 499998 230168 144287 135928 442292 115298 274981 358816 497837 229294 418871 230840 359684 38491 2821 107643 40450 116262 884 169843 138575 277079 47199 322130 155842 440870 324936 378663 22041 429519 492575 179245 398989 62461 198704 289661 268038 75515 277751 67466 250061 192279 18679 16945...
output:
1676100260 11017308813 55395161227 33366611930 3951170105 59638413211 43605562345 36307776847 2489640079 13086121735 68100790213 15042784689 34503617043 59101323614 48083445072 71045135082 4572014907 41340487716 21575574013 46913358164 45708934502 1832759940 79125125615 11744755718 22886837635 58825...
result:
ok 499998 numbers
Test #5:
score: 0
Accepted
time: 573ms
memory: 32572kb
input:
499997 499997 451514 461035 458613 463988 460861 433362 476709 463574 493325 477560 436650 443783 451190 463436 481201 497059 469533 489821 438385 466956 434118 498307 472916 436417 460465 450951 437769 453650 441906 461378 490127 482127 459470 491368 442858 437521 482014 453804 428804 456428 487866...
output:
3603345119 113633307760 69719101269 63006953312 73915451033 53957868961 10263214676 39641623036 13659390583 37286757989 10928979032 22068301955 8070089978 44015760996 23261012971 3013175998 104257438210 76024525215 7710456019 7878251127 90348498837 9056810667 21321801822 59058435765 51807399709 5753...
result:
ok 499997 numbers
Test #6:
score: 0
Accepted
time: 600ms
memory: 34172kb
input:
499996 499996 492262 488431 489063 495414 490758 492568 488514 490197 496394 494920 490413 493865 498909 495886 497082 499896 497203 499817 499213 499601 499337 498365 495206 498513 497967 498803 499141 499031 495315 496031 496216 496440 496758 496898 497544 496872 494390 494236 497098 495035 494944...
output:
64923464842 51130126738 21854391061 66492604697 42861331976 41570316917 19593239410 23101057691 25024304575 12826937160 10921447663 101992588330 4604263767 19698555961 55540629436 76091375457 5830416514 45924963375 73318081240 71524149868 31202589470 52931661620 39282581086 22718997443 8895053269 61...
result:
ok 499996 numbers
Test #7:
score: 0
Accepted
time: 725ms
memory: 33980kb
input:
500000 500000 429754 241122 314721 350175 339659 91918 114877 307995 5838 231452 66230 54216 282348 15952 382572 358090 230070 377281 449827 229736 242530 478691 109112 240504 451991 495791 491662 7227 71909 365677 373901 373689 116695 12746 445690 334973 287903 217207 369103 404205 81044 219159 206...
output:
74468424390 47040099816 62278640593 24520755972 28307616569 55359799091 15656897735 12613204673 31034684007 6700964616 72174598825 77191699501 13617247025 74732853276 42848671806 11757583519 45681051985 42848413120 19850027960 2855881228 23049698172 28109205087 19610054475 5688194237 84326270110 145...
result:
ok 500000 numbers
Test #8:
score: 0
Accepted
time: 591ms
memory: 34100kb
input:
499997 499998 289663 479972 115609 235418 288393 114511 132219 166334 495596 497992 241370 144603 451935 80385 266225 472924 371933 321023 386212 55025 52056 419962 262916 474414 483139 456671 441858 352672 213786 188087 166643 163960 154742 122272 131930 107074 99943 97905 97295 90632 88001 87231 7...
output:
25842792682 48343298968 2775216930 93768748384 106320970536 17002621243 56677826591 75903474014 101944882163 21577430923 96139502787 64287166274 18130209883 18209152547 29175554025 17951054034 107615110527 13020739847 7680583583 46595337455 44449033548 114403950654 85318161500 7707754413 18073231093...
result:
ok 499998 numbers
Test #9:
score: 0
Accepted
time: 701ms
memory: 32664kb
input:
500000 500000 157502 281872 283979 154676 494126 328596 280595 65697 10152 225826 72004 112347 228505 198019 113263 28880 255561 228576 475159 197811 433416 71323 401033 348178 398001 492341 108831 466656 352558 470840 396064 124727 113235 350442 369795 386855 341678 404810 110241 16016 287764 34117...
output:
24626152869 16317848582 70230820137 57803844441 57530964961 1929096148 78468977361 23711603702 63784314661 68162339902 58150721060 14155526920 56591666058 45326163508 89620995545 18041771225 13468663054 11448194787 60178542187 40931914125 52614524316 43662968016 71302776674 27007030807 1424466093 17...
result:
ok 500000 numbers
Test #10:
score: 0
Accepted
time: 705ms
memory: 34636kb
input:
500000 500000 143419 323799 428309 422447 423854 374092 363195 162878 393467 436394 329156 300140 87307 294986 26167 380746 477136 435298 218167 235480 105449 311707 153838 295504 66905 356073 278656 111609 33232 304961 326156 1011 43229 418812 290004 489304 100087 182436 306930 360163 415114 227937...
output:
103760081123 25649291469 61388478740 7844097196 71605235751 23125659921 36954659358 28360848589 32944910737 65855716379 5632231614 3946844555 38405635591 23992972302 3020074293 103109996300 11428702194 97059974969 21758323711 31261944207 15518599077 1934201271 9189614680 800907083 53178530186 637756...
result:
ok 500000 numbers