Cod sursa(job #2180640)

Utilizator Cristina-RamonaMateescu Cristina Cristina-Ramona Data 21 martie 2018 00:01:12
Problema Range minimum query Scor 20
Compilator c Status done
Runda Arhiva educationala Marime 0.87 kb
#include<stdio.h>

int main()

	{ char input[] = "rmq.in";
	  char output[] = "rmq.out";
	  FILE *f=fopen(input,"rt");
	  FILE *g=fopen(output,"wt");
	  long n,M[10000][100],i,j,v[10000],m,p[10000],k,l,r,len;
	  p[1]=0;
	  fscanf(f,"%ld",&n);
	  fscanf(f,"%ld",&m);
	  for (j=1; j<=n; j++){fscanf(f,"%ld",&v[i]); //j=0
			       M[0][j]=v[i];
			      i=j+1;
			      
			      if(i>=(1<<(p[i-1]+1)))p[i]=p[i-1]+1;
		 	      else p[i]=p[i-1];
				}
	  
	  for ( i =1; (1<<i)<=n;i++)
		{for ( j=1 ; j<= n-(1<<i)+1;j++)
			{ 
			 if(M[i-1][j]<M[i-1][j+(1<<(i-1))])
				M[i][j]=M[i-1][j];
			  else 	M[i][j]=M[i-1][j+(1<<(i-1))];

			}
		 
		 
		}
	  
	  for ( k=1; k<=m;k++)
		{ fscanf(f,"%ld %ld",&l,&r);
		  len=r-l+1;
		  i=p[len];
		  if(M[i][r-(1<<i)+1]>M[i][l])
			fprintf(g,"%ld\n", M[i][l]);
		  else fprintf(g,"%ld\n",M[i][r-(1<<i)+1]);
		}
	fclose(f);
	fclose(g);	
	return 0;
	}