Cod sursa(job #2527329)

Utilizator mihnea.anghelMihnea Anghel mihnea.anghel Data 20 ianuarie 2020 08:09:10
Problema Marbles Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <fstream>
#include <algorithm>
#define poz first
#define cul second

using namespace std;
ifstream f("marbles.in");
ofstream g("marbles.out");
pair < long long, long long > v[100009];
long long a[100009][65];
long long n, m, i, j, st, dr, mid, poz1, poz2, p1, p2, op, maxi;

int main()
{
    f>>n>>m;
    for ( i=1; i <= n; i++ )
        f>>v[i].poz>>v[i].cul;
    sort ( v+1, v+n+1 );
    for ( i=1; i <= n; i++ )
        for ( j=1; j <= 64; j++ )
            if ( v[i].cul == j )
                a[i][j] = a[i-1][j]+1;
            else a[i][j] = a[i-1][j];
    for ( ; m--; ){
        f>>op>>poz1>>poz2;
        if ( op == 0 ){
            st = 1; dr = n;
            while ( st <= dr ){
                mid = st+((dr-st)>>1);
                if ( v[mid].poz == poz1 )
                    break;
                if ( v[mid].poz < poz1 )
                    st = mid+1;
                else dr = mid-1;
            }
            v[mid].poz += poz2;
            continue;
        }
        st = 1; dr = n;
        while ( st <= dr ){
            mid = st+((dr-st)>>1);
            if ( v[mid].poz < poz1 )
                st = mid+1;
            else dr = mid-1;
        }
        p1 = st;
        st = 1; dr = n;
        while ( st <= dr ){
            mid = st+((dr-st)>>1);
            if ( v[mid].poz <= poz2 )
                st = mid+1;
            else dr = mid-1;
        }
        p2 = st;
        maxi = -1;
        for ( i=1; i <= 64; i++ )
            maxi = max ( maxi, a[p2][i]-a[p1-1][i] );
        g<<maxi<<"\n";
    }
    return 0;
}