Cod sursa(job #1167481)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 5 aprilie 2014 09:15:43
Problema Marbles Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fin("marbles.in");
ofstream fout("marbles.out");
pair <int,int> v[100010];
int a[65][100010],x,y,z,u,mid,st,dr;
int n,m,i,j,k,ok,minim,maxim,o,t,q,p,r;
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<=64;j++)
            a[j][i]=a[j][i-1];
        a[v[i].second][i]++;
    }
    for(k=1;k<=m;k++){
        fin>>x>>y>>z;
        if (x==0){
            p=1;
            u=n;
            while(p<=u){
                mid=p+(u-p)/2;
                if(v[mid].first==y)
                    break;
                if(v[mid].first<y)
                    p=mid+1;
                else
                    u=mid-1;
            }
            if (p<=u)
                v[mid].first+=z;
        }
        if(x==1){
            p=1;
            u=n;
            while(p<=u){
                mid=p+(u-p)/2;
                if(v[mid].first<y)
                    p=mid+1;
                else
                    u=mid-1;
            }
            st=p;
            p=1;
            u=n;
            while(p<=u){
                mid=p+(u-p)/2;
                if(v[mid].first>z)
                    u=mid-1;
                else
                    p=mid+1;
            }
            dr=u;
            maxim=0;
            for(i=1;i<=64;i++)
                if(a[i][dr]-a[i][st-1]>maxim)
                    maxim=a[i][dr]-a[i][st-1];
            fout<<maxim<<"\n";
        }
    }
    return 0;
}