Cod sursa(job #1175050)

Utilizator livliviLivia Magureanu livlivi Data 24 aprilie 2014 13:06:52
Problema Marbles Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<algorithm>
#include<cstdio>
using namespace std;
struct mazi{int poz,c;};
mazi v[100001];
int a[100001][64];
int n;
bool meow(mazi a,mazi b){
    if (a.poz<b.poz) return true;
    return false;
}
int ala_baba(int nr){
    int in=1,sf=n,m;
    while(in<sf){
        m=(in+sf)/2;
        if (v[m].poz<nr) in=m+1;
        else
        if (v[m].poz==nr) in=sf=m;
        else sf=m;
    }
    return in;
}
int main(){
    freopen ("marbles.in","r",stdin);
    freopen ("marbles.out","w",stdout);
    int i,m,k,p,j,max;
    scanf ("%d%d",&n,&m);
    for(i=1;i<=n;i++)
        scanf ("%d%d",&v[i].poz,&v[i].c);
    sort (v+1,v+n+1,meow);
    for(i=1;i<=n;i++){
        for(j=1;j<=64;j++)
            a[i][j]=a[i-1][j];
        a[i][v[i].c]++;
    }
    for(i=1;i<=m;i++){
        scanf ("%d%d%d",&p,&j,&k);
        if (p==0){
            j=ala_baba(j);
            v[j].poz+=k;
        }
        else {
            max=ala_baba(j);
            if (j==v[max].poz) j=max-1;
            else j=max;
            k=ala_baba(k);
            max=0;
            for(p=1;p<=64;p++)
                if (max<(a[k][p]-a[j][p])) max=a[k][p]-a[j][p];
            printf ("%d\n",max);
        }
    }
    return 0;
}