Cod sursă (job #134421)

Utilizator avatar denisonic Banu Denis denisonic IP ascuns
Problemă Lalele (clasele 9-10) Compilator cpp | 3.14 kb
Rundă Arhiva de probleme Status evaluat
Dată 17 mar. 2015 16:56:12 Scor 100
#include <fstream>
#include <cstdio>
#include <algorithm>
using namespace std;

ofstream g("lalele.out");

long n,i,j,x,y,h[5000006],zi[5000006],day,nr;

int main()
{
    freopen("lalele.in","r",stdin);
    scanf("%ld",&n);
    while (n>0)
    {
        scanf("%ld%ld",&x,&y);
        n-=x;
        if (y!=0)
        {
            for (i=1;i<=x;i++)
            {
                day++;
                nr++;
                zi[nr]=day;
                h[nr]=y;
            }
        }
        else
        {
            for (i=1;i<=nr;i++)
            {
                h[i]+=day-zi[i];
                zi[i]=day;
            }
            for (i=1;i<=x;i++)
            {
                day++;
                nth_element(h+1,h+nr/2+1,h+nr+1);
                nr=nr/2;
                g<<h[nr+1]+day-zi[nr+1]<<'\n';
            }
        }

    }


    g.close();
    return 0;
}
/*#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;
}
*/