Cod sursa(job #3164920)

Utilizator danyyyDaniel danyyy Data 4 noiembrie 2023 19:35:04
Problema Schi Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
const int N=1<<16;
int aint[N];
struct vec
{
    int poz;
    int val;
};
vec v[30001];
int x;
void cerinta(int st,int dr,int p,int a,int& b)
{
    if(a<=st && dr<=b)
    {
        b=b+aint[p];
    }
    else
    {
        int mij=(st+dr)/2,rs=0,rd=0;
        if(a<=mij)cerinta(st,mij,2*p,a,b);
        if(b>mij)cerinta(mij+1,dr,2*p+1,a,b);
    }
}
void actualizare(int st,int dr,int p,int x)
{
    if(st==dr)
    {
        aint[p]=1;
    }
    else
    {
        int mij=(st+dr)/2,fs=2*p,fd=2*p+1;
        if(x<=mij)actualizare(st,mij,fs,x);
        else actualizare(mij+1,dr,fd,x);
        aint[p]=aint[fs]+aint[fd];
    }
}
int main()
{
    int n;
    fin>>n;
    for(int i=1;i<=n;i++)
    {
        fin>>v[i].val;
        v[i].poz=i;
    }
    for(int i=n;i>=1;i--)
    {
      x=v[i].val;
      int rez1=-1,x2,rez2;
      cerinta(1,n,1,1,x);
      actualizare(1,n,1,x);
      v[i].val=x;
    }
    for(int i=1;i<n;i++)
        for(int j=i+1;j<=n;j++)
    {
        if(v[i].val>v[j].val)
            swap(v[i],v[j]);
    }
    for(int i=1;i<=n;i++)
    {
        fout<<v[i].poz<<'\n';
    }
}