Cod sursa(job #1386134)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 12 martie 2015 18:35:10
Problema Marbles Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>
#include <algorithm>
#define nmax 100005
#define kmax 66
using namespace std;
ifstream f("marbles.in");
ofstream g("marbles.out");
int n,m,v[kmax][nmax];
struct marb{unsigned int a;unsigned int k;};
marb t[nmax];

int cautbin(int x)
{
    int p=0;
    for (int i=1<<16;i;i>>=1)
        if (p+i<=n&&x>=t[p+i].a)
            p+=i;
    return p;

}
bool cmp(const marb &e,const marb &r)
{
    return e.a<r.a;

}
int main()
{
    int i,j,op,p,q;
    int x,y,sol;
    f>>n>>m;
    for (i=1;i<=n;i++)
        f>>t[i].a>>t[i].k;
    sort(t+1,t+n+1,cmp);
    for (i=1;i<=n;i++) {
        for (j=1;j<kmax;j++)
            v[i][j]=v[i-1][j];
        v[i][t[i].k]++;
    }
    for (i=1;i<=m;i++) {
        f>>op>>p>>q;
        if (op==0) {
            x=cautbin(p);
            if (t[x].a==p)
                t[x].a+=q;
            continue;
        }
        x=cautbin(p);
        if (x>=1&&t[x].a==p)
            x--;
        y=cautbin(q);

        sol=0;
        for (j=1;j<kmax;j++)
            sol=max(sol,v[y][j]-v[x][j]);
        g<<sol<<'\n';
    }
    return 0;
}