Cod sursă (job #495398)

Utilizator avatar Nemo123456 nichita Nemo123456 IP ascuns
Problemă Lalele (clasele 9-10) Compilator cpp | 1,20 kb
Rundă lasm_22_10_cl11_12 Status evaluat
Dată 22 oct. 2019 22:20:38 Scor 60
#include <cstdio>
#include <algorithm>
#include <cstring>
#define Maxn 5000002
using namespace std;
int n, i, j, d, x, top, day, sum;
struct tulip
{
    int x;
    int y;
}st[Maxn];
void quicksort(int b, int e)
{
    int i = b, j = e, piv = st[(b + e) / 2].x + day - st[(b + e) / 2].y;
    while (i <= j)
    {
        while (st[i].x + day - st[i].y < piv && i <= e)
            ++ i;
        while (st[j].x + day - st[j].y > piv && j >= b)
            -- j;
        if (i <= j)
            swap(st[i], st[j]),
                ++ i,
                   -- j;
    }
    if (j > b) quicksort(b, j);
    if (i < e) quicksort(i, e);
}
int main()
{
    freopen("lalele.in", "r", stdin);
    freopen("lalele.out", "w", stdout);
    scanf("%d", &n);
    while (n)
    {
        scanf("%d %d", &d, &x);
        n -= d;
        for (i = 1; i <= d; ++ i)
            if (x)
        {
               st[++ top].x = x;
               st[top].y = i + sum;
        } else
        {
            day = i + sum;
            quicksort(1, top);
            printf("%d\n", st[(top + 2) / 2].x + day - st[(top + 2) / 2].y);
            top = top / 2;
        }
        sum += d;
    }
    return 0;
}