Cod sursa(job #2518827)

Utilizator Bogdan_BuzatuBuzatu Bogdan Mihai Bogdan_Buzatu Data 6 ianuarie 2020 17:25:10
Problema Marbles Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("marbles.in");
ofstream fout("marbles.out");

int n,nrteste,t,indmax;
int f[70][100010],primul,ultimul,sol,st,dr,mid;
pair< int,int > a[10010];

int main(){

    fin>>n>>nrteste;
    for(int i=1;i<=n;i++){
        fin>>a[i].first>>a[i].second;
        if(a[i].second>indmax){
            indmax=a[i].second;
        }
    }

    sort(a+1, a+n+1);

    for(int i=1;i<=n;i++){
        for(int j=1;j<=indmax;j++){
            if(j==a[i].second){
                f[j][i]=1+f[j][i-1];
            }
            else{
                f[j][i]=f[j][i-1];
            }
        }
    }

    for(int k=1;k<=nrteste;k++){
        int i,j;
        fin>>t>>i>>j;
        if(t==0){
            st=1;
            dr=n;
            while(st<=dr){
                mid=(st+dr)/2;
                if(a[mid].first<i){
                    st=mid+1;
                }else{
                    dr=mid-1;
                }
            }
            a[st].first+=j;
        }
        if(t==1){
            sol=0;
            st=1;
            dr=n;
            while(st<=dr){
                mid=(st+dr)/2;
                if(a[mid].first<i){
                    st=mid+1;
                }else{
                    dr=mid-1;
                }
            }
            primul=st;
            st=1;
            dr=n;
            while(st<=dr){
                mid=(st+dr)/2;
                if(a[mid].first<=j){
                    st=mid+1;
                }else{
                    dr=mid-1;
                }
            }
            ultimul=dr;
            for(int ii=1;ii<=indmax; ii++){
                sol=max(sol, f[ii][ultimul]-f[ii][primul-1]);
            }
            fout<<sol<<"\n";
        }
    }
}