Cod sursa(job #2518001)

Utilizator denmirceaBrasoveanu Mircea denmircea Data 4 ianuarie 2020 17:53:59
Problema Marbles Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#define dim 1000005
using namespace std;
ifstream fin("marbles.in");
ofstream fout("marbles.out");
long long n,s[70][dim],m,i,j,colormax,tip,a,b;
pair<long long,long long> v[dim];
void gaseste(long long a,long long b){
long long st=1,dr=n;
while(st<=dr){
    long long mid=(dr-st)/2+st;
    if(v[mid].first<a)
        st=mid+1;
    else if(v[mid].first>a)
        dr=mid-1;
    else {
        v[mid].first+=b;
        return;
    }
}
}
long long pozitie(long long x){
long long st=1;
long long dr=n;
while(st<=dr){
    long long mid=(dr-st)/2+st;
    if(v[mid].first<x)
        st=mid+1;
    else dr=mid-1;
}
return st;
}
int main()
{
  fin>>n>>m;
  for(i=1;i<=n;i++){
    fin>>v[i].first>>v[i].second;
    colormax=max(colormax,v[i].second);
  }
  sort(v+1,v+n+1);
  for(i=1;i<=n;i++)
    for(j=1;j<=colormax;j++){
        s[j][i]=s[j][i-1];
        if(v[i].second==j) s[j][i]++;
    }
  for(i=1;i<=m;i++){
    fin>>tip>>a>>b;
    if(tip==0)
        gaseste(a,b);
    else {
        long long pozst=pozitie(a);
        long long pozdr=pozitie(b+1)-1;
        long long diff=0;
        for(j=1;j<=colormax;j++){
           diff=max(diff, s[j][pozdr]-s[j][pozst]);
        }
        fout<<diff<<"\n";
    }
  }
}