Cod sursa(job #1175815)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 24 aprilie 2014 22:32:03
Problema Marbles Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <cstdio>
using namespace std;
FILE *f=fopen("marbles.in","r");
FILE *g=fopen("marbles.out","w");
int n,m;
int v[100001],a[100001],sol;
int s[65][100001];


void cautbin(int p,int q,int x)
{int mijl=(p+q)>>1;
if (p>q) return;
if (x<=v[mijl]) {sol=mijl;
                 cautbin(p,mijl-1,x);}
            else cautbin(mijl+1,q,x);
}


int main()
{int i,j,l,t,pos,pos1,pos2,k,u,maxim;
fscanf(f,"%d %d",&n,&m);
for (i=1;i<=n;i++) fscanf(f,"%d %d",&v[i],&a[i]);
v[n+1]=1<<30;

for (j=1;j<=n;j++) {for (i=1;i<=64;i++) s[i][j]=s[i][j-1];
                    s[a[j]][j]++;}

for (t=1;t<=m;t++)
        {fscanf(f,"%d %d %d",&l,&k,&u);
         if (l==0) {sol=0;
                    cautbin(1,n,k);
                    pos=sol;
                    v[pos]+=u;
                    }
              else {sol=0;
                    cautbin(1,n+1,k);
                    pos1=sol;

                    sol=0;
                    cautbin(1,n+1,u);
                    pos2=sol-1;

                    maxim=-1<<16;
                    for (i=1;i<=64;i++) if (s[i][pos2]-s[i][pos1-1]>maxim) maxim=s[i][pos2]-s[i][pos1-1];
                    fprintf(g,"%d\n",maxim);
                    }
         }



return 0;
}