Cod sursa(job #163702)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 22 martie 2008 14:59:30
Problema Marbles Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda Finala, Clasele 5-8 Marime 1.42 kb
#include<stdio.h>
long a[100000],c[100000],n,m,i,j,aa,f,p,p1,cc,s,ac[100],max;
long partit(long a[],long st,long dr)
{long m,mm,i,j,aa;
 m=(st+dr)/2;
 mm=a[m];
 i=st-1;
 j=dr+1;
 while(i<j)
 {
  do{++i;}while(a[i]<mm&&i<m);
  do{--j;}while(a[j]>mm&&j>m);
  if(i<j)
    {
     aa=a[i];
     a[i]=a[j];
     a[j]=aa;
     aa=c[i];
     c[i]=c[j];
     c[j]=aa;
     ++i;
     --j;
    }
 }
 return j+1;
}
void qsort(long a[],long st,long dr)
{long p;
 if(st<dr)
   {
    p=partit(a,st,dr);
    qsort(a,st,p-1);
    qsort(a,p,dr);
   }
}
int main()
{
 freopen("marbles.in","r",stdin);
 freopen("marbles.out","w",stdout);
 scanf("%ld%ld",&n,&m);
 for(i=1;i<=n;++i)
    scanf("%ld%ld",&a[i],&c[i]);
// qsort(a,1,n);
 for(i=1;i<n;++i)
    for(j=i+1;j<=n;++j)
       if(a[i]>a[j])
         {aa=a[i];
          a[i]=a[j];
          a[j]=aa;
          aa=c[i];
          c[i]=c[j];
          c[j]=aa;
         }
 for(i=1;i<=m;++i)
    {
     scanf("%ld%ld%ld",&f,&p,&p1);
     if(f==0)
       {cc=c[p];
       j=1;
       while(a[++j]<p1)
           {a[j-1]=a[j];
            c[j-1]=c[j];}
       a[j-1]=p1;
       c[j-1]=cc;
       }
         else
       {
       for(j=1;j<=n;++j)
          if(a[j]>=p&&a[j]<=p1)
            ++ac[c[j]];
       max=0;
       for(j=1;j<=64;++j)
          {if(ac[j]>max)
            max=ac[j]; ac[j]=0;}
       printf("%ld\n",max);}
    }

 return 0;
}