QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#819146 | #964. Excluded Min | lgvc | TL | 9570ms | 47024kb | C++23 | 5.0kb | 2024-12-18 13:09:22 | 2024-12-18 13:09:22 |
Judging History
answer
#include <bits/stdc++.h>
static char buf[1000000],*paa=buf,*pd=buf;
static char buf2[1000000],*pp=buf2;
#define getchar() paa==pd&&(pd=(paa=buf)+fread(buf,1,1000000,stdin),paa==pd)?EOF:*paa++
inline void pc(char ch){
if(pp-buf2==1000000) fwrite(buf2,1,1000000,stdout),pp=buf2;
*pp++=ch;
}
inline void pcc(){
fwrite(buf2,1,pp-buf2,stdout);
pp=buf2;
}
inline int read(void){
register int x(0);register char c(getchar());
while(c<'0'||c>'9'){c=getchar();}
while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x;
}
void write(int x){
static int sta[20];
int top=0;
do{
sta[top++]=x%10,x/=10;
}while(x);
while(top) pc(sta[--top]+48);
}
void we(int x){
write(x);
pc('\n');
}
int N,Q,a[500009],as[500009],v[500009];
std::vector<int> t[500009];
struct n_t{
int l,r,i;
} q[500009];
bool operator<(n_t x,n_t y) {
if(x.l!=y.l) return x.l<y.l;
if(x.r==y.r) return x.i<y.i;
return x.r>y.r;
}
struct p_t{
int a,b;
};
bool operator<(p_t x,p_t y) {
if(x.a==y.a) return x.b<y.b;
// assert(x.a!=y.a);
return x.a<y.a;
}
std::set<n_t> ss;
std::set<p_t> ss2;
void rm(int p);
#define ls (n<<1)
#define rs ((n<<1)|1)
#define md ((l+r)>>1)
int laz[2000009],ma[2000009];
void up(int n,int l,int r,int L,int R) {
if(r<L||R<l) return;
if(L<=l&&r<=R) {
laz[n]++;
ma[n]--;
return;
}
up(ls,l,md,L,R);
up(rs,md+1,r,L,R);
ma[n]=std::max(ma[ls],ma[rs])-laz[n];
}
void cl(int n,int l,int r,int v) {
if(l==r) {
as[q[l].i]=v;
rm(l);
return;
}
ma[ls]-=laz[n];
ma[rs]-=laz[n];
laz[ls]+=laz[n];
laz[rs]+=laz[n];
laz[n]=0;
if(ma[ls]>=v) {
cl(ls,l,md,v);
} else {
cl(rs,md+1,r,v);
}
}
void up2(int n,int l,int r,int p,int v) {
if(l==r) {
ma[n]=v;
return;
}
ma[ls]-=laz[n];
ma[rs]-=laz[n];
laz[ls]+=laz[n];
laz[rs]+=laz[n];
laz[n]=0;
if(p<=md) up2(ls,l,md,p,v);
else up2(rs,md+1,r,p,v);
ma[n]=std::max(ma[ls],ma[rs])-laz[n];
}
void er4(int n,int l,int r,int p) {
if(l==r) {
ma[n]=-0x3f3f3f3f;
return;
}
ma[ls]-=laz[n];
ma[rs]-=laz[n];
laz[ls]+=laz[n];
laz[rs]+=laz[n];
laz[n]=0;
if(p<=md) er4(ls,l,md,p);
else er4(rs,md+1,r,p);
ma[n]=std::max(ma[ls],ma[rs])-laz[n];
}
int ma2[2000009];
void er3(int n,int l,int r,int p) {
if(l==r) {
ma2[n]=-0x3f3f3f3f;
return;
}
if(p<=md) er3(ls,l,md,p);
else er3(rs,md+1,r,p);
ma2[n]=std::max(ma2[ls],ma2[rs]);
}
void bd(int n,int l,int r) {
if(l==r) {
ma2[n]=q[l].r;
return;
}
bd(ls,l,md);
bd(rs,md+1,r);
ma2[n]=std::max(ma2[ls],ma2[rs]);
}
int f2(int n,int l,int r,int v) {
if(ma2[n]<v) return r+1;
if(l==r) return l;
int a=f2(ls,l,md,v);
if(a==md+1) a=f2(rs,md+1,r,v);
return a;
}
void is(int p) {
int l=q[p].l,r=q[p].r;
ss.insert((n_t){l,r,p});
ss2.insert((p_t){r,p});
int va=r-l+1;
for(int i=l;i<=r;i++) if(v[i]) va--;
// printf("is %d %d\n",q[p].i,va);
up2(1,1,Q,p,va);
er3(1,1,Q,p);
}
void rm(int p) {
// printf("rm %d\n",q[p].i);
er4(1,1,Q,p);
int l=q[p].l,r=q[p].r;
ss2.erase((p_t){r,p});
auto it=ss.find((n_t){l,r,p});
int id=0;
if(it==ss.begin()) {
id=0;
} else {
it--;
id=(*it).r;
}
it=ss.find((n_t){l,r,p});
it++;
int rr;
if(it==ss.end()) rr=Q;else rr=(*it).i-1;
//printf("%d\n",id);
ss.erase((n_t){l,r,p});
while(1) {
int pt=f2(1,1,Q,id+1);
if(pt>rr||q[pt].r>r) {
break;
}
is(pt);
id=q[pt].r;
}
}
signed main(void) {
N=read();Q=read();
for(int i=1;i<=N;i++) {
a[i]=read();
t[a[i]].push_back(i);
}
for(int i=1;i<=Q;i++) {
q[i].l=read();
q[i].r=read();
q[i].i=i;
}
std::sort(q+1,q+Q+1);
int maa=0;
memset(ma,-0x3f,sizeof(ma));
bd(1,1,Q);
for(int i=1;i<=Q;i++) {
if(maa<q[i].r) {
is(i);
maa=q[i].r;
}
}
for(int i=500000;i>=1;i--) {
// if(i<=10) printf("%d\n",i);
for(int j=0;j<t[i].size();j++) {
int p=t[i][j];
v[p]=1;
int l=0,r=Q,mm;
while(l<r) {
mm=(l+r+1)/2;
if(q[mm].l<=p) l=mm;else r=mm-1;
}
auto it=ss2.lower_bound((p_t){p,0});
int tq;
if(it==ss2.end()) {
tq=Q+1;
} else {
tq=(*it).b;
}
if(tq<=l) {
// printf("%d %d %d\n",p,tq,l);
up(1,1,Q,tq,l);
}
}
while(ma[1]>=i) {
cl(1,1,Q,i);
}
}
for(int i=1;i<=Q;i++) we(as[i]);
pcc();
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 5ms
memory: 21984kb
input:
3 3 0 0 2 1 3 2 3 3 3
output:
3 1 0
result:
ok 3 number(s): "3 1 0"
Test #2:
score: 0
Accepted
time: 0ms
memory: 22092kb
input:
3 2 1 2 2 1 2 1 3
output:
0 3
result:
ok 2 number(s): "0 3"
Test #3:
score: 0
Accepted
time: 0ms
memory: 19980kb
input:
10 10 3 0 3 3 9 7 9 6 0 7 3 3 9 9 4 6 1 9 3 4 2 4 7 10 3 7 5 7 2 7
output:
0 1 0 5 0 1 1 0 0 1
result:
ok 10 numbers
Test #4:
score: 0
Accepted
time: 0ms
memory: 22016kb
input:
10 10 3 0 0 0 5 1 1 1 2 1 1 2 8 8 5 7 1 7 2 2 1 5 5 6 4 6 3 10 6 8
output:
1 0 2 7 1 4 0 2 8 3
result:
ok 10 numbers
Test #5:
score: 0
Accepted
time: 2ms
memory: 19968kb
input:
100 100 15 82 7 39 63 55 64 99 71 63 32 99 67 94 3 43 15 75 45 55 53 4 35 36 15 40 82 20 62 43 6 83 27 95 27 45 98 44 35 98 39 7 17 32 76 7 40 16 40 63 13 8 22 27 11 12 61 14 19 45 100 97 90 88 22 59 25 63 4 25 65 16 22 92 84 44 99 66 89 26 93 97 35 97 92 1 32 40 97 97 78 43 7 12 23 53 61 74 33 90 1...
output:
68 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 0 0 0 0 0 0 0 0 0 0 0 0 0 28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
result:
ok 100 numbers
Test #6:
score: 0
Accepted
time: 5ms
memory: 19912kb
input:
100 100 17 86 33 8 11 27 8 11 13 9 3 43 11 23 26 42 44 12 44 12 15 0 75 51 72 5 49 2 40 57 24 47 39 42 4 5 6 52 3 2 42 19 62 33 24 22 16 69 4 33 44 70 29 11 2 2 58 9 6 10 25 10 33 26 17 3 14 0 48 7 48 51 0 39 54 37 14 9 3 85 18 4 25 9 2 0 39 8 17 13 25 45 10 39 12 18 9 5 66 6 13 89 10 90 42 67 43 52...
output:
76 80 0 0 18 1 18 1 5 5 1 1 22 11 0 15 0 59 5 56 1 80 0 1 1 21 0 61 22 11 0 3 8 15 40 1 8 81 71 20 2 0 60 0 60 31 0 59 0 0 0 28 0 21 1 7 5 0 31 0 76 28 0 0 27 1 23 0 1 27 1 0 0 1 0 5 63 52 2 43 73 1 86 0 61 0 27 2 30 5 31 1 0 14 59 27 1 1 67 63
result:
ok 100 numbers
Test #7:
score: 0
Accepted
time: 0ms
memory: 19976kb
input:
100 100 6 1 1 5 13 11 35 5 3 2 0 4 0 9 1 2 3 3 19 1 7 9 7 11 7 8 10 18 28 17 31 2 4 8 2 3 3 2 22 4 9 4 7 2 9 15 8 2 3 19 5 24 3 10 11 5 9 20 8 4 11 10 18 9 13 34 5 34 2 9 24 6 21 16 6 12 26 2 2 2 6 11 2 14 3 8 2 12 2 19 8 3 18 23 5 21 23 8 4 0 44 67 25 74 24 79 59 73 4 81 42 66 48 55 15 38 35 63 16 ...
output:
22 50 56 0 78 23 0 22 29 24 38 37 17 57 0 6 0 58 52 4 64 44 0 37 75 75 34 89 0 4 0 12 39 0 0 69 53 14 38 13 36 30 0 7 46 83 28 6 44 22 40 50 24 26 36 49 0 0 6 49 27 78 0 37 11 49 16 50 25 30 37 58 64 28 62 36 0 52 0 95 34 4 50 17 0 27 44 0 0 21 44 66 69 0 39 25 0 2 63 0
result:
ok 100 numbers
Test #8:
score: 0
Accepted
time: 0ms
memory: 21944kb
input:
100 100 0 1 0 1 0 1 1 1 0 2 1 1 2 0 1 1 0 3 0 0 0 0 0 0 0 0 1 2 2 0 0 0 0 1 0 0 1 2 0 0 1 0 0 3 0 1 0 0 3 0 0 0 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 2 0 0 0 4 0 1 1 0 1 0 2 2 0 0 1 41 53 31 36 78 99 60 86 1 67 3 92 89 92 60 70 42 56 42 46 39 84 40 66 9 27 75 78 33 94 17 53...
output:
13 6 22 27 67 90 3 11 15 5 46 27 19 4 62 37 84 35 53 4 47 95 55 63 24 39 22 51 67 21 55 36 24 16 33 74 4 16 63 81 41 14 3 54 6 40 36 33 29 32 14 60 13 17 73 44 34 2 14 79 59 13 75 72 31 10 22 57 23 37 74 2 6 6 38 5 4 62 66 22 33 0 23 21 12 54 75 6 8 16 37 36 3 53 63 18 67 60 31 19
result:
ok 100 numbers
Test #9:
score: 0
Accepted
time: 9570ms
memory: 47024kb
input:
300000 300000 216504 101790 177261 84423 215788 67188 170620 125383 222808 149722 190483 152974 27524 172557 109218 201761 138030 177265 270417 244027 29296 13565 108388 270622 75102 137755 134081 21988 249714 268911 178911 39288 197287 232628 152784 226739 40134 213404 230781 181323 235763 55745 44...
output:
1 3 0 0 1 1 0 11 0 0 3 1 0 0 1 1 0 0 0 0 3 0 1 1 1 1 1 1 0 0 0 0 0 1 1 13 0 0 0 11 0 1 1 1 3 0 1 1 0 0 0 0 0 0 1 0 0 0 3 0 13 1 1 14 3 0 0 1 0 0 1 1 1 1 0 0 3 0 1 0 0 3 1 1 0 0 0 3 0 0 1 1 0 1 1 0 1 0 0 1 1 0 0 1 1 1 0 1 0 1 1 1 1 0 0 0 0 11 1 0 0 0 13 0 0 3 0 1 0 1 0 0 1 0 3 0 3 1 0 0 0 1 1 13 1 1 ...
result:
ok 300000 numbers
Test #10:
score: -100
Time Limit Exceeded
input:
300000 300000 59375 140115 159075 154436 141196 15338 197722 158230 143168 29542 129520 24443 86025 174147 79007 72481 119436 30645 76347 16689 86494 58226 52030 12421 82352 104631 29663 109785 14534 15981 14386 116251 72729 63907 160568 62881 49823 131557 73658 36095 152983 102029 30197 8451 6637 5...