Cod sursa(job #2522482)

Utilizator Gabi1623Ghita Gabriel Gabi1623 Data 12 ianuarie 2020 16:39:07
Problema Marbles Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.92 kb
#include <fstream>
#include <algorithm>

using namespace std;

pair <int, int> b[100011];
int n, m, i, j, s[65][100011],maxim, st, dr, p, u, mid, k, t, cmax;

int main()
{
    ifstream fin("marbles.in");
    ofstream fout("marbles.out");
    fin>>n>>m;
    for (i=1; i<=n; i++)
    {

        fin>>b[i].first>>b[i].second;

        if (b[i].second > cmax)
            cmax = b[i].second;

    }
    sort(b+1, b+n+1);

    for (i=1; i<=n; i++)
    {

        for (j=1; j<=cmax; j++)
            if (j == b[i].second)
                s[ j ][i] = 1 + s[ j ][i-1];
            else
                s[j][i] = s[j][i-1];

    }
    for (k=1; k<=m; k++)
    {

        fin>>t>>i>>j;

        if (t == 0)
        {

            p = 1;
            u = n;
            while (p<=u)
            {
                mid = p + (u-p)/2;
                if (b[mid].first == i)
                    break;
                if (b[mid].first < i)
                    p = mid+1;
                else
                    u = mid-1;
            }
            if (p<=u)
                b[mid].first += j;
        }
        else
        {

            p = 1;
            u = n;
            while (p<=u)
            {
                mid = p + (u-p)/2;
                if (b[mid].first < i)
                    p = mid+1;
                else
                    u = mid-1;
            }
            st = p;

            p = 1;
            u = n;
            while (p<=u)
            {
                mid = p + (u-p)/2;
                if (b[mid].first > j)
                    u = mid - 1;
                else
                    p = mid+1;
            }
            dr = u;
            maxim = 0;
            for (i=1; i<=cmax; i++)
                if (s[i][dr] - s[i][st-1] > maxim)
                    maxim = s[i][dr] - s[i][st-1];
            fout<<maxim<<"\n";

        }
    }
    return 0;
}