Cod sursa(job #1235330)

Utilizator Kira96Denis Mita Kira96 Data 29 septembrie 2014 15:31:24
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include<fstream>
#define FOR(a,b,c) for(register int a=b;a<=c;++a)
#define ROF(a,b,c) for(register int a=b;a>=c;--a)
#define N 100100
using namespace std;
ifstream f("schi.in");
ofstream g("schi.out");
int sol[N],v[N],n,A[N];
void upd(int x,int y)
{
	for(;x<=n;x+=x&-x)
		A[x]+=y;
}
int sum(int x)
{
	int sum=0;
	for(;x;x-=x&-x)
		sum+=A[x];
	return sum;
}
int cb(int p)
{
	int st=1,dr=n,sol=n;
	while(st<=dr)
	{
		int mij=(st+dr)>>1;
		if(sum(mij)>=p)
		{
			sol=mij;
			dr=mij-1;
		}
		else
			st=mij+1;
	}
	return sol;
}
int main ()
{
	f>>n;
	FOR(i,1,n)
		f>>v[i];
	FOR(i,1,n)
	upd(i,1);
	ROF(i,n,1)
	{
		int aux=cb(v[i]);
		upd(aux,-1);
		sol[aux]=i;
	}
	FOR(i,1,n)
	g<<sol[i]<<"\n";
	return 0;
}