Cod sursa(job #165305)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 25 martie 2008 20:17:19
Problema Marbles Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <stdio.h>
#define nMax 100005
#define tMax 65

long n,m,i,j,p[nMax],tip;
long p1,p2,t,a,b,s[nMax][tMax],max;

long bsearch(long v){
    long low=1,high=n,mid;
    while(low<=mid){
        mid=(low+high)/2;
        if (p[mid]>v)
            high=mid-1;
        else if (p[mid]<v)
                low=mid+1;
            else return mid;
    }
return low;
}

long endsearch(long v){
    long low=1,mid,high=n+1;
    while (low<high){
        mid=(low+high)/2;
        if (p[mid]<v)
           low=mid+1;
        else
            high=mid;
    }
return low;
}

int main(){
    freopen("marbles.in","r",stdin);
    freopen("marbles.out","w",stdout);

    scanf("%ld %ld",&n,&m);
    for (i=1;i<=n;i++){
        scanf("%ld %ld",&p[i],&tip);
        for (j=1;j<=64;j++)
            s[i][j]=s[i-1][j];
        s[i][tip]++;
    }

    for (i=1;i<=m;i++){
        scanf("%ld %ld %ld",&t,&a,&b);
        if (t==0)
           p[bsearch(a)]+=b;
        else{
            p1=endsearch(a);
            p2=endsearch(b);
            if (p[p2]>b)p2--;
            max=0;
            for (j=1;j<=64;j++)
                if (s[p2][j]-s[p1-1][j]>max)max=s[p2][j]-s[p1-1][j];
            printf("%ld\n",max);
        }
    }

return 0;
}