Cod sursa(job #2520791)

Utilizator BogauuuBogdan Ivancu Bogauuu Data 9 ianuarie 2020 19:09:02
Problema Marbles Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream fin("marbles.in");
ofstream fout("marbles.out");

pair <int, int> b[100005];

int s[70][100005];
int n,m,i,j,maxim,st,dr,p,u,mij,k,q,af;

int main()
{
    fin >> n >> m;
    for (i=1;i<=n;i++)
    {
        fin >> b[i].first >> b[i].second;
        if (b[i].second>maxim) maxim=b[i].second;
    }
    sort(b+1,b+n+1);
    for (i=1;i<=n;i++)
    {
        for (j=1;j<=maxim;j++)
        {
            if (j==b[i].second) s[j][i]=s[j][i-1]+1;
            else s[j][i]=s[j][i-1];
        }
    }
    for (k=1;k<=m;k++)
    {
        fin >> q >> i >> j;
        if (q==0)
        {
            p=1;
            u=n;
            while (p<=u)
            {
                mij=(p+u)/2;
                if (b[mij].first==i) break;
                if (b[mij].first<i) p=mij+1;
                else u=mij-1;
            }
            if (p<=u) b[mij].first+=j;
        }
        else
        {
            p=1;
            u=n;
            while (p<=u)
            {
                mij=(p+u)/2;
                if (b[mij].first<i) p=mij+1;
                else u=mij-1;
            }
            st=p;
            p=1;
            u=n;
            while (p<=u)
            {
                mij=(p+u)/2;
                if (b[mij].first>j) u=mij-1;
                else p=mij+1;
            }
            dr=u;
            af=0;
            for (i=1;i<=maxim;i++) if (s[i][dr]-s[i][st-1]>af) af=s[i][dr]-s[i][st-1];
            fout << af << "\n";
        }
    }

    return 0;
}