답안 #957872

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
957872 2024-04-04T12:38:24 Z vjudge1 Abracadabra (CEOI22_abracadabra) C++17
25 / 100
1682 ms 11868 KB
#include<stdio.h>
#include<stdlib.h>

#define N 200004
int n,a[N],t[N],q,sz[N],at[N],*eh[N],eo[N],zz[1000005];

void upd(int p,int k) { for(;p<N;p|=p+1)t[p]+=k; }
int qry(int p) {int z=0;for(;p>0;p&=p-1)z+=t[p-1];return z;}

void add(int p,int k) { sz[p]=k; upd(p,k); }
void rem(int p) { upd(p,-sz[p]); }

int grp(int x)
{
    if(x<=0)return -1;
    int p=0,v=0;
    for(int j=1<<19;j>0;j>>=1) if(p+j<=N&&v+t[p+j-1]<x)p+=j,v+=t[p-1];
    return p;
}

void append(int i,int j)
{
    int o=eo[i]++;
    if(o>=2&&(o&o-1)==0)eh[i]=(int*)realloc(eh[i],2*o*sizeof**eh);
    eh[i][o]=j;
}

void shuffle()
{
    static int done=0;
    if(done)return;
    int g1=grp(n/2),g2=grp(n/2+1);
    if(g1!=g2){done=1;return;}
    int rl=qry(g1);
    int st=at[g1];
    int md=n/2-rl+at[g1];
    int ed=at[g1]+sz[g1];
    for(int l=md,j=md;j<=ed;++j) if(j==ed||a[j]>a[l])add(a[l],j-l),l=j;
    rem(g1);
    add(g1,n/2-rl);
}

int main()
{
    scanf("%d%d",&n,&q);
    if(q>100000)return 1;
    for(int i=1;i<=n;++i)scanf("%d",a+i),at[a[i]]=i;
    for(int l=1,i=1;i<=n+1;++i) if(i==n+1||a[i]>a[l]) add(a[l],i-l),l=i;

    for(int i=0;i<=n+1;++i)eh[i]=(int*)realloc(0,2*sizeof**eh);

    for(int t,p,i=0;i<q;++i) scanf("%d%d",&t,&p),append(t<n+1?t:n+1,i),append(t<n+1?t:n+1,p);

    for(int i=0;i<=n+1;++i)
    {
        for(int j=0;j<eo[i];j+=2)
        {
            int gg=grp(eh[i][j+1]);
            int idx=eh[i][j+1]-qry(gg);
            zz[eh[i][j]]=a[at[gg]+idx-1];
        }
        shuffle();
    }

    for(int i=0;i<q;++i)printf("%d\n",zz[i]);

    return 0;
}

Compilation message

Main.cpp: In function 'void append(int, int)':
Main.cpp:24:18: warning: suggest parentheses around '-' in operand of '&' [-Wparentheses]
   24 |     if(o>=2&&(o&o-1)==0)eh[i]=(int*)realloc(eh[i],2*o*sizeof**eh);
      |                 ~^~
Main.cpp: In function 'void shuffle()':
Main.cpp:35:9: warning: unused variable 'st' [-Wunused-variable]
   35 |     int st=at[g1];
      |         ^~
Main.cpp: In function 'int main()':
Main.cpp:45:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   45 |     scanf("%d%d",&n,&q);
      |     ~~~~~^~~~~~~~~~~~~~
Main.cpp:47:31: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   47 |     for(int i=1;i<=n;++i)scanf("%d",a+i),at[a[i]]=i;
      |                          ~~~~~^~~~~~~~~~
Main.cpp:52:35: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   52 |     for(int t,p,i=0;i<q;++i) scanf("%d%d",&t,&p),append(t<n+1?t:n+1,i),append(t<n+1?t:n+1,p);
      |                              ~~~~~^~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 2392 KB Execution failed because the return code was nonzero
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 0 ms 2396 KB Execution failed because the return code was nonzero
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1682 ms 10960 KB Output is correct
2 Correct 61 ms 11604 KB Output is correct
3 Correct 1573 ms 10996 KB Output is correct
4 Correct 43 ms 11600 KB Output is correct
5 Correct 53 ms 11312 KB Output is correct
6 Correct 44 ms 11600 KB Output is correct
7 Correct 49 ms 11348 KB Output is correct
8 Correct 45 ms 11340 KB Output is correct
9 Correct 49 ms 11332 KB Output is correct
10 Correct 42 ms 11600 KB Output is correct
11 Correct 41 ms 11848 KB Output is correct
12 Correct 39 ms 11868 KB Output is correct
13 Correct 40 ms 11428 KB Output is correct
14 Correct 43 ms 11860 KB Output is correct
15 Correct 38 ms 11600 KB Output is correct
16 Correct 13 ms 9560 KB Output is correct
17 Correct 41 ms 11312 KB Output is correct
18 Correct 36 ms 11476 KB Output is correct
19 Correct 1 ms 6492 KB Output is correct
20 Correct 1 ms 6492 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 2392 KB Execution failed because the return code was nonzero
2 Halted 0 ms 0 KB -