Pagini recente »
Istoria paginii utilizator/ianis2008
|
Istoria paginii utilizator/sasteve
|
Istoria paginii utilizator/frosacosmin
|
Istoria paginii utilizator/emmaandreea
|
Cod sursă (job #442690)
Cod sursă (job
#442690)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("lalele.in");
ofstream g("lalele.out");
long long n, zt, d, x, i, j, var, poz, aux, aux2, restf; ///zt=zile totale
long long v[5000001], v2[5000001];
int cautlocbinar(int f, int dr)
{
int st=1;
int mij=(dr+st)/2;
while (st<=dr)
{
if (v[mij]==f || (v[mij-1]<f && f<v[mij]))
return mij;
else if (v[mij]<f)
{
st=mij+1;
mij=(dr+st)/2;
}
else if (v[mij]>f)
{
dr=mij-1;
mij=(st+dr)/2;
}
}
}
void actualizezvector(int f, int mij, int counter)
{
for (int val=counter;val>mij;val--)
v[val]=v[val-1];
v[mij]=f;
for (int val=1;val<=counter;val++)
{
v[val]=v[val]+1;
}
}
void acutalizezvector2(int k)
{
for (i=1;i<=k;i++)
{
v[i]=v[i]+1;
}
}
int main()
{
f>>n;
f>>d>>x;
var=d;
for (i=d;i>=1;i--,var--)
{
v[i]=x+var;
}
zt=d;
aux2=d;
restf=d;
while (zt<n)
{
f>>d>>x;
if (x!=0)
{
for(i=1;i<=d;i++)
{
zt++;
restf++;
poz=cautlocbinar(x, restf);
actualizezvector(x, poz, restf);
}
aux2=aux2+d;
}
else
{
zt+=d;
for (var=1;var<=d;var++)
{
aux=aux2;
if (aux2%2==0)
{
aux2=aux2/2;
}
else aux2=aux2/2+1;
for (i=aux;i>=aux2;i--)
{
if (i==aux2)
g<<v[i]<<'\n';
v[i]=NULL;
}
restf=aux-aux2;
aux2=restf+1;
acutalizezvector2(restf);
}
}
}
return 0;
}