Cod sursa(job #1162673)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 31 martie 2014 22:01:47
Problema Marbles Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <fstream>
#include <algorithm>

using namespace std;

struct data {
    int x;
    int c;
} v[100005];

int m,n,i,j,a,b,st,dr,mid,op,Max;

int d[70][100005];

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

int main() {
    ifstream f("marbles.in");
    ofstream g("marbles.out");
    f>>n>>m;
    for(i=1;i<=n;i++)
        f>>v[i].x>>v[i].c;
    sort(v+1,v+n+1,cmp);
    for(i=1;i<=n;i++)
        for(j=1;j<=64;j++)
            if(j==v[i].c)
                d[j][i]=d[j][i-1]+1;
            else
                d[j][i]=d[j][i-1];
    while(m--) {
        f>>op>>i>>j;
        if(op==0) {
            st=1;dr=n;
            while(st<=dr) {
                mid=(st+dr)/2;
                if(v[mid].x<i)
                    st=mid+1;
                else
                    dr=mid-1;
            }
            v[st].x+=j;
        }
        else {
            st=1;dr=n;
            while(st<=dr) {
                mid=(st+dr)/2;
                if(v[mid].x<i)
                    st=mid+1;
                else
                    dr=mid-1;
            }
            a=dr;
            st=1;dr=n;
            while(st<=dr) {
                mid=(st+dr)/2;
                if(v[mid].x<=j)
                    st=mid+1;
                else
                    dr=mid-1;
            }
            b=dr;
            Max=0;
            for(i=1;i<=64;i++)
                if(Max<d[i][b]-d[i][a])
                    Max=d[i][b]-d[i][a];
            g<<Max<<"\n";
        }
    }
    return 0;
}