Cod sursa(job #2180624)

Utilizator Cristina-RamonaMateescu Cristina Cristina-Ramona Data 20 martie 2018 23:45:35
Problema Range minimum query Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.71 kb
#include<stdio.h>

int main()

	{ long n,M[100000][100],i,j,v[100000],m,p[100000],k,l,r,len;
	  p[1]=0;
	  scanf("%ld",&n);
	  for (j=1; j<=n; j++){scanf("%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))];

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