Pagini recente » Cod sursa (job #2260335) | Cod sursa (job #2064470) | Cod sursa (job #702394) | Cod sursa (job #1845301) | Cod sursa (job #2386114)
#include <fstream>
using namespace std;
#define inf 5000050001LL
int n,i,v[100004],t;
long long vMin[262146],x, Ad[262146];
int pMin[262146], poz;
ifstream f("biscuiti.in");
ofstream g("biscuiti.out");
void build_min(int nod,int st,int dr)
{
if(st==dr)
{
pMin[nod]=st;
vMin[nod]=v[st];
return;
}
int mij=(st+dr)>>1;
build_min(nod<<1,st,mij);
build_min((nod<<1)+1,mij+1,dr);
if(vMin[(nod<<1)+1] < vMin[nod<<1])
{
vMin[nod]=vMin[(nod<<1)+1];
pMin[nod]=pMin[(nod<<1)+1];
}
else
{
vMin[nod]=vMin[nod<<1];
pMin[nod]=pMin[nod<<1];
}
}
void update(int nod, int st, int dr)
{
if(st==dr && st==poz)
{
Ad[nod]=inf;
vMin[nod]=inf;
return;
}
int mij = (st+dr)>>1;
if (mij < poz)
{
Ad[nod<<1]+=t;
vMin[nod<<1]+=t;
update((nod<<1)+1,mij+1,dr);
}
else
update(nod<<1,st,mij);
if(vMin[nod<<1]<=vMin[(nod<<1)+1])
{
vMin[nod]=vMin[nod<<1]+Ad[nod];
pMin[nod]=pMin[nod<<1];
}
else
{
vMin[nod]=vMin[(nod<<1)+1]+Ad[nod];
pMin[nod]=pMin[(nod<<1)+1];
}
}
int main()
{
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
build_min(1,1,n);
long long dif = 0;
for(t=1;t<n;t++)
{
poz=pMin[1];
x=vMin[1];
dif+=x-v[poz];
update(1,1,n);
}
poz=pMin[1];
x=vMin[1];
dif+=x-v[poz];
g<<dif;
f.close();
g.close();
return 0;
}