Cod sursa(job #2521097)

Utilizator LeVladzCiuperceanu Vlad LeVladz Data 10 ianuarie 2020 13:14:58
Problema Marbles Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.79 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

int n,m,i,j,op,a,b,s[70][100005];
pair<int, int> v[100005];

int main()
{
    fin >> n >> m;
    for (i=1; i<=n; i++)
        fin >> v[i].first >> v[i].second;
    sort(v+1, v+n+1);
    for (i=1; i<=n; i++)
        for (j=1; j<=v[n].second; j++)
            if (j == v[i].second)
                s[j][i] = s[j][i-1]+1;
            else
                s[j][i] = s[j][i-1];
    for (;m--;)
    {
        fin >> op >> a >> b;
        if (op == 0)
        {
            int st = 1; int dr = n; int mid = 0;
            while (st <= dr)
            {
                mid = (st+dr)/2;
                if (v[mid].first == a)
                    break;
                if (v[mid].first < a)
                    st = mid+1;
                else
                    dr = mid-1;
            }
            if (v[mid].first == a)
                v[mid].first += b;
        }
        else
        {
            int st = 1; int dr = n;
            while (st <= dr)
            {
                int mid = (st+dr)/2;
                if (v[mid].first < a)
                    st = mid+1;
                else
                    dr = mid-1;
            }
            int poz1 = st;
            st = 1; dr = n;
            while (st <= dr)
            {
                int mid = (st+dr)/2;
                if (v[mid].first > b)
                    dr = mid-1;
                else
                    st = mid+1;
            }
            int poz2 = dr;
            int maxim = 0;
            for (i=1; i<=v[n].second; i++)
                maxim = max(maxim, s[i][poz2]-s[i][poz1-1]);
            fout << maxim << "\n";
        }
    }
    return 0;
}