Cod sursa(job #2355364)

Utilizator BAlexandruBorgovan Alexandru BAlexandru Data 25 februarie 2019 23:55:59
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream f("datorii.in");
ofstream g("datorii.out");

struct datorie
{
  int zi,val;
};

datorie s1[100005];

int n,m,i,j;
int x,s[15005],sdat[100005],k;
int tip,v,t,p,q,suma;

int cmp(datorie a, datorie b)
{
    if (a.zi!=b.zi)
        return a.zi<b.zi;
    else
        if (a.val!=b.val)
            return a.val<b.val;
}

int main()
{
    f>>n>>m;
    for (i=1;i<=n;i++)
    {
        f>>x;
        s[i]=s[i-1]+x;
    }
    for (i=1;i<=m;i++)
    {
        f>>tip;
        if (tip==0)
        {
            f>>t>>v;
            k++;
            s1[k].val=v;
            s1[k].zi=t;
            sort(s1,s1+k+1,cmp);
            sdat[k]=sdat[k-1]+s1[k].val;
        }
        else
        {
            f>>p>>q;
            suma=s[q]-s[p-1];

            int st=1,dr=k,mij,poz1=0,poz2=0;
            while (st<=dr)
            {
                mij=(st+dr)/2;
                if (s1[mij].zi<=q)
                {
                    poz2=mij;
                    st=mij+1;
                }
                else
                    dr=mij-1;
            }
            st=1,dr=k;
            while (st<=dr)
            {
                mij=(st+dr)/2;
                if (s1[mij].zi>=p)
                {
                    poz1=mij;
                    dr=mij-1;
                }
                else
                    st=mij+1;
            }
            g<<suma-(sdat[poz2]-sdat[poz1-1])<<"\n";
        }
    }
    return 0;
}