Cod sursa(job #164640)

Utilizator katakunaCazacu Alexandru katakuna Data 24 martie 2008 17:03:28
Problema Marbles Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include<stdio.h>


struct aa {int a; char b;};
aa s[100000],aux;




int q,w,k,p,n,i,m1,j,c[65][100000],t,a,b,x,y,max;;



void sort(){

int c,p;

 for(i=2;i<=k;i++){
  c=i;
  p=c>>1;

     while((p)&&(s[c].b>s[p].b)){
     aux=s[c];
     s[c]=s[p];
     s[p]=aux;

     c=p;
     p=c>>1;

     }

  }


  for(i=k;i>1;i--){
  aux=s[i];
  s[i]=s[1];
  s[1]=aux;
  p=1;
  c=p<<1;

    k--;

      while(c<=k){
       if((s[c].b<s[c+1].b)&&c<k){c++;}

       if(s[p].b<s[c].b){
       aux=s[p];
       s[p]=s[c];
       s[c]=aux;
       p=c;
       c=p<<1;
       }
       else{break;}
     }
  }

}


int binar (int sol){
int p,u,mij;

p=1;
u=n;

   while(p<=u){
   mij=(p+u)/2;

     if(s[mij].a>=sol)
     u=mij-1;

     else
     p=mij+1;

   }


return p;
}


int main(){


FILE *f=fopen("marbles.in","r");

fscanf(f,"%d %d",&n,&m1);

  for(i=1;i<=n;i++){
  fscanf(f,"%d %d",&s[i].a,&s[i].b);
  }


k=n;
//sort();



  for(i=1;i<=n;i++){

    for(j=1;j<=64;j++)

    c[j][i]=c[j][i-1];

    c[ s[i].b ] [i]++;

  }

FILE *g=fopen("marbles.out","w");


  for(i=1;i<=m1;i++){
  fscanf(f,"%d %d %d",&t,&a,&b);

    if(t==0){
    x = binar(a);
    s[x].a=b+a;
    }

    else{

    x = binar(a);
    y = binar(b);

    if(s[y].a!=b)
    y--;

    max=0;

       for(j=1;j<=64;j++){

       q=c[j][y];

	 if(j==s[x].b)
	 w=c[j][x]-1;

	 else
	 w=c[j][x];

	 if(q-w>max){
	 max=q-w;
	 }


      }

    fprintf(g,"%d\n",max);
    }



  }



fclose(f);
fclose(g);

return 0;
}