Cod sursa(job #1162794)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 31 martie 2014 23:22:04
Problema Marbles Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream fin ("marbles.in");
ofstream fout ("marbles.out");

struct bila {
    int x;
    int c;
}v[100010];

bool cmp (const bila &a, const bila &b) {
    return a.x<b.x;
}

int n,m,i,j,st,dr,mid,x,y,a,b,op,maxim,s[65][100010];

int main () {

    fin>>n>>m;
    for (i=1;i<=n;i++)
        fin>>v[i].x>>v[i].c;

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

    for (i=1;i<=64;i++)
        for (j=1;j<=n;j++) {
            s[i][j]=s[i][j-1];
            if (v[j].c==i)
                s[i][j]++;
        }


    while (m--) {
        fin>>op>>a>>b;
        if (op) {

            st=1;dr=n;
            while(st<=dr) {
                mid=(st+dr)/2;
                if(v[mid].x<a)
                    st=mid+1;
                else
                    dr=mid-1;
            }
            x=st;

            st=1;dr=n;
            while(st<=dr) {
                mid=(st+dr)/2;
                if(v[mid].x<=b)
                    st=mid+1;
                else
                    dr=mid-1;
            }
            y=dr;
            maxim=0;
            for (i=1;i<=64;i++)
                if (maxim < s[i][y]-s[i][x-1])
                    maxim=s[i][y]-s[i][x-1];
            fout<<maxim<<"\n";
        }else {

            st=1;dr=n;
            while(st<=dr) {
                mid=(st+dr)/2;
                if(v[mid].x<a)
                    st=mid+1;
                else
                    dr=mid-1;
            }
            x=st;
            v[x].x+=b;
        }


    }

    return 0;
}