Cod sursa(job #2517205)

Utilizator DanutAldeaDanut Aldea DanutAldea Data 3 ianuarie 2020 07:20:55
Problema Marbles Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <fstream>
#include <algorithm>
#define x first
#define y second
using namespace std;

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

int n,m,i,j,k,q,s[65][100001],st,dr,mid,sol,cul;
pair<int,int> v[100001];

int main(){
    fin>>n>>m;
    for(i=1;i<=n;i++)
        fin>>v[i].x>>v[i].y;
    sort(v+1,v+n+1);

    for(i=1;i<=n;i++)
        for(j=1;j<=64;j++)
            if(v[i].y==j)
                s[j][i]=s[j][i-1]+1;
            else
                s[j][i]=s[j][i-1];

    for(;m;m--){
        fin>>q>>i>>j;

        if(q==0){
            st=1; dr=n;
            while(st<=dr){
                mid=(st+dr)/2;

                if(v[mid].x==i)
                    break;

                if(v[mid].x>i)
                    dr=mid-1;
                else
                    st=mid+1;
            }
            v[mid].x+=j;
        }else{
            st=1; dr=n;
            while(st<=dr){
                mid=(st+dr)/2;

                if(v[mid].x>=i)
                    dr=mid-1;
                else
                    st=mid+1;
            }
            i=st;

            st=1; dr=n;
            while(st<=dr){
                mid=(st+dr)/2;

                if(v[mid].x<=j)
                    st=mid+1;
                else
                    dr=mid-1;
            }
            //j=dr;
            st=i;
            sol=-1;

            for(i=1;i<=64;i++)
                sol=max(sol,s[i][dr]-s[i][st-1]);

            fout<<sol<<"\n";
        }
    }

    return 0;
}