Cod sursa(job #3163120)

Utilizator tudor_costinCostin Tudor tudor_costin Data 30 octombrie 2023 16:46:10
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
const int Nmax=30005;
int n;
int aib[Nmax],v[Nmax];
vector<pair<int,int>> sol;
int lsb(int x)
{
    return x&(-x);
}
void update(int poz,int val)
{
    for(int i=poz;i<=n;i+=lsb(i))
    {
        aib[i]+=val;
    }
    return;
}
int sum(int poz)
{
    int s=0;
    for(int i=poz;i>=1;i-=lsb(i))
    {
        s+=aib[i];
    }
    return s;
}
int bs(int x,int st,int dr)
{
    while(st<dr)
    {
        int mij=(st+dr)/2;
        if(x<=sum(mij))
        {
            dr=mij;
        }
        else st=mij+1;
    }
    return st;
}
int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
    {
        fin>>v[i];
        update(i,1);
    }
    for(int i=n;i>=1;i--)
    {
        int poz=bs(v[i],1,n);
        update(poz,-1);
        sol.push_back({poz,i});
    }
    sort(sol.begin(),sol.end());
    for(int i=0;i<sol.size();i++)
    {
        fout<<sol[i].second<<'\n';
    }
    return 0;
}