Cod sursa(job #2535884)

Utilizator verde.cristian2005Verde Flaviu-Cristian verde.cristian2005 Data 1 februarie 2020 12:27:01
Problema Marbles Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
using namespace std;
ifstream in("marbles.in");
ofstream out("marbles.out");
const int N=100000;
int aib[65][N+1],cul[N+1];
int lsb(int x)
{
    return x&-x;
}
void update(int care,int poz,int val)
{
    for(; poz<=N; poz+=lsb(poz))
        aib[care][poz]+=val;
}
int ask(int care,int poz)
{
    int sum=0;
    for(; poz>0; poz-=lsb(poz))
        sum+=aib[care][poz];
    return sum;
}
int main()
{
    int n,m,max1=0,i,j,a,b,t;
    in>>n>>m;
    for(i=1; i<=n; i++)
    {
        in>>a>>b;
        cul[a]=b;
        update(b,a,1);
    }
    for(i=1; i<=m; i++)
    {
        in>>t>>a>>b;
        if(t==0)
        {
            cul[a+b]=cul[a];
            cul[a]=0;
            update(cul[a+b],a+b,1);
            update(cul[a+b],a,-1);
        }
        else
        {
            max1=0;
            for(j=1; j<=64; j++)
                max1=max(max1,ask(j,b)-ask(j,a-1));
            out<<max1<<'\n';
        }
    }
    return 0;
}