QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#819146#964. Excluded MinlgvcTL 9570ms47024kbC++235.0kb2024-12-18 13:09:222024-12-18 13:09:22

Judging History

你现在查看的是最新测评结果

  • [2024-12-18 13:09:22]
  • 评测
  • 测评结果:TL
  • 用时:9570ms
  • 内存:47024kb
  • [2024-12-18 13:09:22]
  • 提交

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();
}

詳細信息

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...

output:


result: