Cod sursa(job #264501)

Utilizator Bogdan_tmmTirca Bogdan Bogdan_tmm Data 22 februarie 2009 11:09:11
Problema Marbles Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include<iostream.h>
#include<stdio.h>
FILE *f=fopen("marbles.in","r"),*g=fopen("marbles.out","w");
long n,m,op,x,y,mij,i1,j1,i;
struct {long poz;int culoare;} a[1000],aux;
void qsort(long st,long dr)
{
  long i=st,j=dr,mij=a[(st+dr)/2].poz;
  do
  {
    while(i<=j&&a[i].poz<mij) i++;
    while(i<=j&&a[i].poz<mij) j--;
    if(i<=j)
    {
       aux=a[i];a[i]=a[j];a[j]=aux;
       i++;j--;
    }
  }while(i<=j);
  if(i<dr) qsort(i,dr);
  if(st<j) qsort(st,j);
}
void search(long x)
{
      i1=1;j1=n;
      while(i1<=j1)
      {
        mij=(i1+j1)/2;
        if(a[mij].poz==x) break;
        else
             if(x<a[mij].poz) j1=mij-1;
             else
                  i1=mij+1;
      }
}
int main()
{
  fscanf(f,"%ld%ld",&n,&m);
  for(i=1;i<=n;i++)
     fscanf(f,"%ld%d",&a[i].poz,&a[i].culoare);
  qsort(1,n);
  for(i=1;i<=m;i++)
  {
    fscanf(f,"%ld%ld%ld",&op,&x,&y);
    if(!op)
    {
      search(x);
      a[mij].poz=x+y;
    }
    else
        {
            long max=0,x2,y2,nr;
            search(x);x2=mij;
            search(y);y2=mij;
            for(i1=1;i1<=64;i1++)
            {
              nr=0;
              for(j1=x2;j1<=y2;j1++)
                 if(a[j1].culoare==i1) nr++;
              if(nr>max) max=nr;
            }
            fprintf(g,"%ld\n",max);
        }
  }
  return 0;
}