Cod sursa(job #1955588)

Utilizator georgerapeanuRapeanu George georgerapeanu Data 6 aprilie 2017 08:41:06
Problema Order Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.62 kb
#include <cstdio>
using namespace std;
FILE *f=fopen("order.in","r");
FILE *g=fopen("order.out","w");
int AIB[30005];
int N;
void u(int pos,int val)
{
    for(int i=pos;i<=N;i+=(i&(-i)))
        AIB[i]+=val;
}
int q(int val)
{
    int i=0,s=0;
    for(int p=(1<<30);p;p>>=1)
        if(i+p<=N&&s+AIB[i+p]<val)
        {i+=p;s+=AIB[i];}
    i++;
    return i;
}
int main()
{
    fscanf(f,"%d",&N);
    for(int i=1;i<=N;i++) u(i,1);
    int pos=2;
    for(int i=1;i<=N;i++)
    {
        pos=(pos+i-2)%(N-i+1)+1;
        int val=q(pos);
        u(val,-1);
        fprintf(g,"%d ",val);
    }
    fclose(f);
    fclose(g);
    return 0;
}