Cod sursa(job #1161512)

Utilizator Kira96Denis Mita Kira96 Data 31 martie 2014 11:52:37
Problema Marbles Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<fstream>
#define N 100100
#define fi first
#define bit 65
#define se second
#include<algorithm>
#define FOR(a,b,c) for(int a=b;a<=c;a++)
using namespace std;
ifstream f("marbles.in");
ofstream g("marbles.out");
pair<int,int> v[N];
int a,b,n,i,t,sol,j,S[N][bit],m;
int cbs(int x)
{
    int st=1,dr=n,sol=n+1,mij;
    while(st<=dr)
    {
        mij=(st+dr)>>1;
        if(v[mij].fi>=x)
        {
            sol=mij;
            dr=mij-1;
        }
        else
        st=mij+1;
    }
    return sol;
}
int cbd(int x)
{
    int st=1,dr=n,sol=0,mij;
    while(st<=dr)
    {
        mij=(st+dr)>>1;
        if(v[mij].fi<=x)
        {
            st=mij+1;
            sol=mij;
        }
        else
        dr=mij-1;
    }
    return sol;
}
int main()
{
    f>>n>>m;
    FOR(i,1,n)
    {
        f>>v[i].fi>>v[i].se;
    }
    sort(v+1,v+n+1);
    for(i=1;i<=n;++i)
    {
        for(j=1;j<=64;++j)
        S[i][j]=S[i-1][j];
        S[i][v[i].se]++;
    }
    for(i=1;i<=m;++i)
    {
        f>>t;
        if(t)
        {
        f>>a>>b;
        a=cbs(a);
        a--;
        b=cbd(b);
        sol=0;
        for(j=1;j<=64;++j)
        sol=max(sol,S[b][j]-S[a][j]);
        g<<sol<<"\n";
        }
        else
        {
            f>>a>>b;
            a=cbs(a);
            v[a].fi+=b;
        }
    }
    return 0;
}