Cod sursa(job #1510539)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 25 octombrie 2015 11:57:38
Problema Marbles Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <cstdio>
#include <algorithm>
#define nmax 100005
#define cmax 65
using namespace std;
struct nod{
    int l,c[cmax];
} v[nmax];
int n,m;



int binarylow(int k)
{
    int sol=0;
    for (int bit=1<<16;bit;bit>>=1)
        if (sol+bit<=n&&v[sol+bit].l<k)
            sol+=bit;
    return sol+1;
}
int binaryhigh(int k)
{
    int sol=0;
    for (int bit=1<<16;bit;bit>>=1)
        if (sol+bit<=n&&v[sol+bit].l<=k)
            sol+=bit;
    return sol;
}

int main()
{
    freopen("marbles.in","r",stdin);
    freopen("marbles.out","w",stdout);
    scanf("%d %d",&n,&m);
    int i,j,k,t,sol,op;
    for (i=1;i<=n;i++) {
        scanf("%d %d",&v[i].l,&k);
        for (j=1;j<cmax;j++)
            v[i].c[j]=v[i-1].c[j];
        v[i].c[k]++;
    }
    for (i=1;i<=m;i++) {
        scanf("%d %d %d",&op,&j,&k);
        if (op==0) {
            j=binaryhigh(j);
            v[j].l+=k;
        }
        else {
            sol=0;
            j=binarylow(j);
            k=binaryhigh(k);
            for (t=1;t<cmax;t++)
                sol=max(sol,v[k].c[t]-v[j-1].c[t]);
            printf("%d\n",sol);
        }
    }
    return 0;
}