Pagini recente »
Monitorul de evaluare
|
Borderou de evaluare (job #283669)
|
Istoria paginii runda/probleme-simple-si-urate/clasament
|
Cod sursă (job #271941)
|
Cod sursă (job #134325)
Cod sursă (job
#134325)
#include <fstream>
#include <cstdio>
#include <vector>
using namespace std;
ofstream g("lalele.out");
long n,i,x,y,zi;
struct ab{
long zi,h;
};
vector<ab> heap;
ab aux;
void up(long nod)
{
ab aux;
if (nod==1)
return ;
if (heap[nod].h+zi-heap[nod].zi>heap[nod/2].h+zi-heap[nod/2].zi)
{
aux=heap[nod];
heap[nod]=heap[nod/2];
heap[nod/2]=aux;
up(nod/2);
}
}
void down(long nod)
{
ab aux;
if (nod*2>heap.size())
return ;
if (nod*2+1<heap.size())
{
if (heap[nod*2].h+zi-heap[nod*2].zi<heap[nod*2+1].h+zi-heap[nod*2+1].zi && heap[nod*2+1].h+zi-heap[nod*2+1].zi> heap[nod].h+zi-heap[nod].zi)
{
aux=heap[nod];
heap[nod]=heap[nod*2+1];
heap[nod*2+1]=aux;
down(nod*2+1);
}
else if (heap[nod*2].h+zi-heap[nod*2].zi>heap[nod].h+zi-heap[nod].zi)
{
aux=heap[nod];
heap[nod]=heap[nod*2];
heap[nod*2]=aux;
down(nod*2);
}
}
else if (heap[nod*2].h+zi-heap[nod*2].zi>heap[nod].h+zi-heap[nod].zi)
{
aux=heap[nod];
heap[nod]=heap[nod*2];
heap[nod*2]=aux;
down(nod*2);
}
}
int main()
{
freopen("lalele.in","r",stdin);
scanf("%ld",&n);
i=0;
aux.zi=13;
aux.h=13;
heap.push_back(aux);
while (i<n)
{
scanf("%ld%ld",&x,&y);
if (y!=0)
{
for (int j=1;j<=x;j++)
{
zi++;
aux.zi=zi;
aux.h=y;
heap.push_back(aux);
up(heap.size()-1);
}
i+=x;
}
else
{
for (int k=1;k<=x;k++)
{
zi++;
y=heap.size()/2;
for (int j=1;j<=y;j++)
{
if (j==y)
g<<heap[1].h+zi-heap[1].zi<<'\n';
heap[1]=heap[heap.size()-1];
heap.pop_back();
down(1);
}
}
i+=x;
}
}
g.close();
return 0;
}