Cod sursa(job #3277125)

Utilizator puica2018Puica Andrei puica2018 Data 15 februarie 2025 12:33:32
Problema Marbles Scor 100
Compilator cpp-64 Status done
Runda vs11_12_vine_oji_2025 Marime 1.64 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,m;

pair <int,int> a[100005];

int fr[65][100005];

int cb1(int v)
{
    int st=1,dr=n,mij,p=-1;
    while(st<=dr)
    {
        mij=(st+dr)/2;

        if(a[mij].first>=v)
        {
            p=mij;
            dr=mij-1;
        }
        else
            st=mij+1;
    }

    return p;
}

int cb2(int v)
{
    int st=1,dr=n,mij,p=-1;
    while(st<=dr)
    {
        mij=(st+dr)/2;

        if(a[mij].first<=v)
        {
            p=mij;
            st=mij+1;
        }
        else
            dr=mij-1;
    }

    return p;
}

int main()
{
    fin>>n>>m;
    for(int i=1; i<=n; i++)
        fin>>a[i].first>>a[i].second;

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

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

    while(m--)
    {
        int t,l,r;
        fin>>t;

        if(t==0)
        {
            fin>>l>>r;

            int p=cb1(l);

            a[p].first+=r;
        }
        else
        {
            fin>>l>>r;

            int p1=cb1(l);
            if(p1>=1)
            {
                int p2=cb2(r);
                if(p1<=p2)
                {
                    int ans=0;
                    for(int j=1; j<=64; j++)
                        ans=max(ans,fr[j][p2]-fr[j][p1-1]);
                    fout<<ans<<"\n";
                }
            }
        }
    }

    return 0;
}