답안 #224788

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
224788 2020-04-18T19:28:36 Z MKopchev Teams (CEOI11_tea) C++14
100 / 100
473 ms 34680 KB
#include<bits/stdc++.h>
using namespace std;

const int nmax=1e6+42;
int n;
pair<int/*low*/,int/*id*/> inp[nmax];

int dp[nmax];
int parent[nmax];

int look_up[nmax];

void construct(int sz)
{
    int mx=0;

    look_up[0]=0;

    for(int i=1;i<=n;i++)
    {
        dp[i]=-1;
        parent[i]=-1;

        if(i-inp[i].first>=0&&look_up[i-inp[i].first]>=i-sz)
        {
            parent[i]=look_up[i-inp[i].first];
            dp[i]=dp[look_up[i-inp[i].first]]+1;
        }

        if(dp[i]>=mx)
        {
            mx=dp[i];
            look_up[i]=i;
        }
        else look_up[i]=look_up[i-1];
    }
}

int main()
{
    scanf("%i",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%i",&inp[i].first);
        inp[i].second=i;
    }

    sort(inp+1,inp+n+1);

    construct(n);

    printf("%i\n",dp[n]);

    int want=dp[n];

    int ok=n,not_ok=inp[n].first-1;

    while(ok-not_ok>1)
    {
        int av=(ok+not_ok)/2;
        construct(av);

        if(dp[n]==want)ok=av;
        else not_ok=av;
    }

    construct(ok);

    int pos=n;

    for(int i=dp[n];i>=1;i--)
    {
        printf("%i",pos-parent[pos]);
        for(int j=parent[pos]+1;j<=pos;j++)
        {
            printf(" %i",inp[j].second);
        }
        printf("\n");
        pos=parent[pos];
    }
    return 0;
}

Compilation message

tea.cpp: In function 'int main()':
tea.cpp:41:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%i",&n);
     ~~~~~^~~~~~~~~
tea.cpp:44:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%i",&inp[i].first);
         ~~~~~^~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Correct 4 ms 384 KB Output is correct
4 Correct 4 ms 384 KB Output is correct
5 Correct 4 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Correct 5 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Correct 5 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 512 KB Output is correct
2 Correct 6 ms 512 KB Output is correct
3 Correct 7 ms 512 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 432 KB Output is correct
2 Correct 7 ms 512 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 39 ms 2936 KB Output is correct
2 Correct 38 ms 2680 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 45 ms 3160 KB Output is correct
2 Correct 36 ms 2552 KB Output is correct
3 Correct 42 ms 3192 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 317 ms 20972 KB Output is correct
2 Correct 316 ms 22520 KB Output is correct
3 Correct 370 ms 24568 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 445 ms 27512 KB Output is correct
2 Correct 472 ms 30852 KB Output is correct
3 Correct 406 ms 29816 KB Output is correct
4 Correct 411 ms 28408 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 473 ms 27512 KB Output is correct
2 Correct 314 ms 34680 KB Output is correct
3 Correct 406 ms 30712 KB Output is correct
4 Correct 468 ms 32504 KB Output is correct