Cod sursa(job #969121)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 3 iulie 2013 15:48:55
Problema Marbles Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("marbles.in");
ofstream g("marbles.out");
int n,m;

struct bile{
    int x;
    int c;
    int v[70];
};
bile a[100013];

inline int cmp(bile a,bile b){
    return (a.x<b.x);
}

inline int seek(int x){
    int p=1,u=n,mij;
    while(p<=u){
        mij=p+(u-p)/2;
        if(a[mij].x==x)
            return mij-1;
        else if(a[mij].x>x)
            u=mij-1;
        else
            p=mij+1;
    }
    return p-1;
}

int main(void){
    register int i,j,t,cmax=0,p,u,x,y;

    f>>n>>m;
    for(i=1;i<=n;i++){
        f>>a[i].x>>a[i].c;
        if(cmax<a[i].c)
            cmax=a[i].c;
    }

    sort(a+1,a+n+1,cmp);

    for(i=1;i<=n;i++){
        for(j=1;j<=cmax;j++)
            a[i].v[j]=a[i-1].v[j];
        a[i].v[a[i].c]++;
    }

    int maxim;
    for(;m>0;m--){
        f>>t>>x>>y;
        //cautam prima si ultima bila din intervalul [x;y]
        if(t==1){
            p=seek(x);
            u=seek(y);
            maxim=0;
            for(i=1;i<=cmax;i++){
                if(a[u].v[i]-a[p].v[i]>maxim)
                    maxim=a[u].v[i]-a[p].v[i];
            }
            g<<maxim<<"\n";
        }
        else if(t==0){
            p=seek(x)+1;
            a[p].x+=y;
        }
    }
    return 0;
}