Cod sursa(job #430082)

Utilizator adrianraduleaRadulea Adrian adrianradulea Data 30 martie 2010 18:46:22
Problema Range minimum query Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include<stdio.h>
FILE *f,*g;
int i,put[30],n,a[100500],m[100500][25],ok,j,p,x,y,min,k,log[100500],o;
int main()
{ f=fopen("rmq.in","r"); g=fopen("rmq.out","w");
  fscanf(f,"%d%d",&n,&p);
  log[1]=0; for(i=2;i<=n;i++) log[i]=log[i/2]+1;
  for(i=1;i<=n;i++) fscanf(f,"%d",&m[0][i]);
  for(j=1; (1<<j)<=n; j++)
   for(i=1; i+(1<<j)<=n+1; i++)
    if(m[j-1][i]<m[j-1][i+(1<<(j-1))]) m[j][i]=m[j-1][i];
	else m[j][i]=m[j-1][i+(1<<(j-1))];
  for(i=1;i<=p;i++)
   { fscanf(f,"%d%d",&x,&y);
     k=log[y-x+1]; 
	 if(m[k][x]<m[k][y+1-(1<<k)]) fprintf(g,"%d\n",m[k][x]);
	 else fprintf(g,"%d\n",m[k][y+1-(1<<k)]);
   }
  fclose(g);
  return 0;
}