Cod sursa(job #2326981)

Utilizator filicriFilip Crisan filicri Data 24 ianuarie 2019 12:13:05
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>
#define nmax 30004
using namespace std;
ifstream f("schi.in");
ofstream g("schi.out");
int n,v[nmax],sol[nmax],tree[4*nmax];
void init (int node,int low,int hi,int pos)
{
    if (low==hi)
    {
        tree[node]=1;
        return;
    }
    int mid=(low+hi)/2,nodes=2*node;
    if (pos<=mid) init(nodes,low,mid,pos);
    else init(nodes+1,mid+1,hi,pos);
    tree[node]=tree[nodes]+tree[nodes+1];
}
void update (int node,int low,int hi,int pos,int val)
{
    if (low==hi)
    {
        sol[low]=val;
        tree[node]=0;
        return;
    }
    int mid=(low+hi)/2,nodes=2*node;
    if (pos<=tree[nodes]) update(nodes,low,mid,pos,val);
    else update(nodes+1,mid+1,hi,pos-tree[nodes],val);
    tree[node]=tree[nodes]+tree[nodes+1];
}
int main()
{
    f>>n;
    for (int i=1;i<=n;i++) f>>v[i];
    for (int i=1;i<=n;i++) init(1,1,n,i);
    for (int i=n;i>=1;i--) update(1,1,n,v[i],i);
    for (int i=1;i<=n;i++) g<<sol[i]<<'\n';
    f.close();
    g.close();
    return 0;
}