답안 #171321

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
171321 2019-12-28T10:53:08 Z arnold518 코끼리 (Dancing Elephants) (IOI11_elephants) C++14
97 / 100
9000 ms 10416 KB
#include "elephants.h"
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

const int MAXN = 150000;
const int SQ = 400;

int N, L, A[MAXN+10], B[MAXN+10], S[MAXN+10];
pii C[MAXN+10];

int P[MAXN/SQ+10][SQ*3+10], Q[MAXN/SQ+10][SQ*3+10], R[MAXN/SQ+10][SQ*3+10], sz[MAXN/SQ+10];

void calc(int num)
{
    int i, j;
    sort(P[num], P[num]+sz[num]);
    for(i=0; i<=sz[num]; i++) Q[num][i]=R[num][i]=0;
    for(i=sz[num]-1; i>=0; i--)
    {
        int pos=upper_bound(P[num], P[num]+sz[num], P[num][i]+L)-P[num];
        if(pos==sz[num]) Q[num][i]=P[num][i]+L, R[num][i]=1;
        else Q[num][i]=Q[num][pos], R[num][i]=R[num][pos]+1;
    }
    S[num]=P[num][0];
}

void make()
{
    int i, j;
    for(i=0; i<N; i++) C[i]={A[i], i};
    sort(C, C+N);
    for(i=0; i<=(N-1)/SQ; i++) sz[i]=0;
    for(i=0; i<N; i++) P[i/SQ][sz[i/SQ]++]=C[i].first, B[C[i].second]=i/SQ;
    for(i=0; i<=(N-1)/SQ; i++) calc(i);
}

void pop(int p)
{
    int i, j;

    int num=B[p];
    for(i=0; i<sz[num]; i++) if(P[num][i]==A[p]) break;
    int pos=i;
    for(i=pos+1; i<sz[num]; i++) P[num][i-1]=P[num][i];
    sz[num]--;
    calc(num);

    B[p]=-1;
}

void push(int p, int x)
{
    int i, j;

    int num=upper_bound(S, S+(N-1)/SQ+1, x)-S-1;
    if(num==-1) num=0;
    P[num][sz[num]++]=x;
    calc(num);

    B[p]=num;
}

void init(int _N, int _L, int *X)
{
    int i, j;
    N=_N; L=_L;

    for(i=0; i<N; i++) A[i]=X[i];
    make();
}

int query()
{
    int i, j;
    int bef=-1;
    int ans=0;
    for(i=0; i<=(N-1)/SQ; i++)
    {
        int pos=upper_bound(P[i], P[i]+sz[i], bef)-P[i];
        if(pos==sz[i]) continue;
        ans+=R[i][pos];
        bef=Q[i][pos];
    }
    return ans;
}

int qcnt=0;

int update(int p, int y)
{
    int i, j;

    pop(p);
    push(p, y);
    A[p]=y;

    qcnt++;
    if(qcnt==SQ) qcnt=0, make();

    return query();
}

Compilation message

elephants.cpp: In function 'void calc(int)':
elephants.cpp:19:12: warning: unused variable 'j' [-Wunused-variable]
     int i, j;
            ^
elephants.cpp: In function 'void make()':
elephants.cpp:33:12: warning: unused variable 'j' [-Wunused-variable]
     int i, j;
            ^
elephants.cpp: In function 'void pop(int)':
elephants.cpp:43:12: warning: unused variable 'j' [-Wunused-variable]
     int i, j;
            ^
elephants.cpp: In function 'void push(int, int)':
elephants.cpp:57:9: warning: unused variable 'i' [-Wunused-variable]
     int i, j;
         ^
elephants.cpp:57:12: warning: unused variable 'j' [-Wunused-variable]
     int i, j;
            ^
elephants.cpp: In function 'void init(int, int, int*)':
elephants.cpp:69:12: warning: unused variable 'j' [-Wunused-variable]
     int i, j;
            ^
elephants.cpp: In function 'int query()':
elephants.cpp:78:12: warning: unused variable 'j' [-Wunused-variable]
     int i, j;
            ^
elephants.cpp: In function 'int update(int, int)':
elephants.cpp:95:9: warning: unused variable 'i' [-Wunused-variable]
     int i, j;
         ^
elephants.cpp:95:12: warning: unused variable 'j' [-Wunused-variable]
     int i, j;
            ^
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 3 ms 376 KB Output is correct
5 Correct 3 ms 376 KB Output is correct
6 Correct 2 ms 328 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 3 ms 376 KB Output is correct
5 Correct 3 ms 376 KB Output is correct
6 Correct 2 ms 328 KB Output is correct
7 Correct 2290 ms 1704 KB Output is correct
8 Correct 2286 ms 1980 KB Output is correct
9 Correct 2591 ms 3756 KB Output is correct
10 Correct 2796 ms 3832 KB Output is correct
11 Correct 2781 ms 3744 KB Output is correct
12 Correct 4107 ms 3768 KB Output is correct
13 Correct 2740 ms 3708 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 3 ms 376 KB Output is correct
5 Correct 3 ms 376 KB Output is correct
6 Correct 2 ms 328 KB Output is correct
7 Correct 2290 ms 1704 KB Output is correct
8 Correct 2286 ms 1980 KB Output is correct
9 Correct 2591 ms 3756 KB Output is correct
10 Correct 2796 ms 3832 KB Output is correct
11 Correct 2781 ms 3744 KB Output is correct
12 Correct 4107 ms 3768 KB Output is correct
13 Correct 2740 ms 3708 KB Output is correct
14 Correct 3029 ms 2216 KB Output is correct
15 Correct 3765 ms 2508 KB Output is correct
16 Correct 5687 ms 4088 KB Output is correct
17 Correct 6540 ms 5088 KB Output is correct
18 Correct 6497 ms 5112 KB Output is correct
19 Correct 7224 ms 5112 KB Output is correct
20 Correct 6734 ms 5112 KB Output is correct
21 Correct 6314 ms 5092 KB Output is correct
22 Correct 4220 ms 5092 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 3 ms 376 KB Output is correct
5 Correct 3 ms 376 KB Output is correct
6 Correct 2 ms 328 KB Output is correct
7 Correct 2290 ms 1704 KB Output is correct
8 Correct 2286 ms 1980 KB Output is correct
9 Correct 2591 ms 3756 KB Output is correct
10 Correct 2796 ms 3832 KB Output is correct
11 Correct 2781 ms 3744 KB Output is correct
12 Correct 4107 ms 3768 KB Output is correct
13 Correct 2740 ms 3708 KB Output is correct
14 Correct 3029 ms 2216 KB Output is correct
15 Correct 3765 ms 2508 KB Output is correct
16 Correct 5687 ms 4088 KB Output is correct
17 Correct 6540 ms 5088 KB Output is correct
18 Correct 6497 ms 5112 KB Output is correct
19 Correct 7224 ms 5112 KB Output is correct
20 Correct 6734 ms 5112 KB Output is correct
21 Correct 6314 ms 5092 KB Output is correct
22 Correct 4220 ms 5092 KB Output is correct
23 Execution timed out 9072 ms 10416 KB Time limit exceeded
24 Halted 0 ms 0 KB -