Submission #64437

#TimeUsernameProblemLanguageResultExecution timeMemory
64437Bodo171Zalmoxis (BOI18_zalmoxis)C++14
100 / 100
534 ms45356 KiB
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
const int nmax=1000*1000+5;
vector<int> trebuie[nmax];
int v[nmax],orig[nmax],act[nmax],niu[nmax],niuact[nmax];
int n,k,total,i,nr,newnr,j,p,idx;
void solve(int x)
{
    if(x==0)
    {
        cout<<x<<' ';
        return;
    }
    if(k>total)
    {
        total++;
        solve(x-1);
        solve(x-1);
    }
    else cout<<x<<' ';
}
int main()
{
   // freopen("data.in","r",stdin);
    cin>>n>>k;
    for(i=1;i<=n;i++)
    {
        cin>>v[i];
        orig[i]=v[i];
        act[i]=i;
    }
    nr=n;v[n+1]=-1;
    for(i=0;i<30;i++)
    {
        for(j=1;j<=nr;j++)
        {
            if(v[j]==i)
            {
                 p=j;
                 while(v[p]==i&&p<=nr)
                 {
                     p++;
                 }
                 p--;
                 if((p-j+1)&1)
                 {
                     trebuie[act[p]].push_back(i);
                     total++;
                 }
                 j=p;
            }
        }
        newnr=0;
        for(j=1;j<=nr;j++)
            if(v[j]==i)
        {
            p=j;
            while(v[p]==i&&p<=nr)
            {
                p++;
            }
            p--;
            for(idx=1;idx<=(p-j+2)/2;idx++)
            {
                ++newnr;
                niuact[newnr]=act[p];
                niu[newnr]=v[p]+1;
            }
            j=p;
        }
        else
        {
            ++newnr;
            niuact[newnr]=act[j];
            niu[newnr]=v[j];
        }
        nr=newnr;
        for(j=1;j<=nr;j++)
            v[j]=niu[j],act[j]=niuact[j];
    }
    for(i=1;i<=n;i++)
    {
        cout<<orig[i]<<' ';
        for(j=0;j<trebuie[i].size();j++)
            solve(trebuie[i][j]);
    }
    return 0;
}

Compilation message (stderr)

zalmoxis.cpp: In function 'int main()':
zalmoxis.cpp:86:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(j=0;j<trebuie[i].size();j++)
                 ~^~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...