Cod sursa(job #2522175)

Utilizator mihnea03Ciocioiu Mihnea mihnea03 Data 12 ianuarie 2020 01:31:04
Problema Marbles Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>
#include <algorithm>
using namespace std;
pair <int,int> a[100010];
int b[64][10010];
int i,j,n,m,p,c,cMax,q,p1,p2,poz,val,x;

int cautBin (int x) {
    int st=1,dr=n;
    while (st<=dr) {
        int mid=(st+dr)/2;
        if (a[mid].first==x) return mid;
        if (a[mid].first>=x) dr=mid-1;
        else st=mid+1;
    }
}

void creareMatrice () {
    for (i=1;i<=cMax;i++) {
        for (j=1;j<=n;j++) {
            if (a[j].second==i) {
                b[i][j]=b[i][j-1]+1;
            }
            else b[i][j]=b[i][j-1];
        }
    }
}

int main() {
    ifstream fin("marbles.in");
    ofstream fout("marbles.out");
    fin>>n>>m;
    for (i=1;i<=n;i++) {
        fin>>p>>c;
        a[i]=make_pair(p,c);   ///a[i].first=pozitie
        cMax=max(cMax,c);      ///a[i].second=culoare
    }
    sort(a+1,a+n+1);
    creareMatrice();
    for (x=1;x<=m;x++) {
        fin>>q>>p1>>p2;
        if (q==0) {
            poz=cautBin(p1);
            a[poz].first+=p2;
        }
        else {
            val=0;
            p1=cautBin(p1);
            p2=cautBin(p2);
            for (i=1;i<=cMax;i++) {
                val=max(val,b[i][p2]-b[i][p1-1]);
            }
            fout<<val<<"\n";
        }
    }
    return 0;
}