Cod sursă (job #442722)

Utilizator avatar Cybot Stancila Ionut-Marian Cybot IP ascuns
Problemă Lalele (clasele 9-10) Compilator cpp | 2,51 kb
Rundă Arhiva de probleme Status evaluat
Dată 5 mar. 2019 19:15:34 Scor 20
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("lalele.in");
ofstream g("lalele.out");
unsigned long long n, zt, d, x, i, j, var, poz, aux, aux2, restf, ok; ///zt=zile totale
unsigned 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;
        }
    }
    return mij;
}

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)
        {
            zt+=d;
            aux2+=d;
            for(i=1;i<=d;i++)
            {
                restf++;
                poz=cautlocbinar(x, restf);
                actualizezvector(x, poz, restf);
            }
        }
        else if (x==0)
        {
            zt+=d;
            for (var=1;var<=d;var++)
            {
                aux=aux2;
                if (aux2%2==0)
                {
                    aux2=aux2/2;
                }
                else {
                    aux2=aux2/2+1;
                }
                if (aux%2==0)
                {
                    for (i=aux;i>aux2;i--)
                    {
                        cout<<v[i]<<" ";
                        if (i==aux2+1)
                        g<<v[i]<<'\n';
                        v[i]=NULL;
                    }
                }
                else
                {
                    for (i=aux;i>=aux2;i--)
                    {
                        cout<<v[i]<<" ";
                        if (i==aux2)
                        g<<v[i]<<'\n';
                        v[i]=NULL;
                    }
                }
                cout<<'\n';
                restf=aux-aux2;
                aux2=restf;
                acutalizezvector2(restf);
            }
        }
    }
    return 0;
}