Cod sursa(job #3345242)

Utilizator mihaidragiDragu Mihai mihaidragi Data 8 martie 2026 17:25:44
Problema Schi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <bits/stdc++.h>
using namespace std;
//Doamne Iisuse Hristoase Fiul lui Dumnezeu miluieste-ma pe mine pacatosul
ifstream in("schi.in");
ofstream out("schi.out");
#define zeros(x)((x^(x-1))&x)
int n;
vector<int>aib;
vector<int>loc;
vector<int>rezultat;
void Add(int x,int val)
{
    for(int i=x;i<=n;i+=zeros(i))
         aib[i]+=val;
}
int query(int x)
{
    int sum=0;
    for(int i=x;i>0;i-=zeros(i))
        sum+=aib[i];
    return sum;
}
int main()
{
    ios::sync_with_stdio(false);
    in.tie(NULL);
    in>>n;
    aib.resize(n+1);
    loc.resize(n+1);
    rezultat.resize(n+1);
    for(int i=1;i<=n;++i)
  {
     in>>loc[i];
     Add(i,1);
  }
    for(int i=n;i>=1;--i)
    {
        int pozitie_libera=0,st=1,dr=n;
        while(st<=dr)
        {
            int mij=(st+dr)/2;
            if(query(mij)>=loc[i])
            {
                pozitie_libera=mij;
                dr=mij-1;
            }
            else
                st=mij+1;
        }
        rezultat[pozitie_libera]=i;
        Add(pozitie_libera,-1);
    }
    for(int i=1;i<=n;++i)
        out<<rezultat[i]<<'\n';
    return 0;
}