Pagini recente » Cod sursa (job #2011425) | Cod sursa (job #1511044) | Cod sursa (job #792326) | Cod sursa (job #1523739) | Cod sursa (job #233708)
Cod sursa(job #233708)
#include<stdio.h>
#define NMAX 100002
#define Log 18
FILE*f=fopen("rmq.in","r");
FILE*g=fopen("rmq.out","w");
int m[Log][NMAX];
int a[NMAX];
int N;
int t;
int lg[NMAX];
void read()
{
fscanf(f,"%d %d",&N,&t);
int i;
for(i=0;i<N;++i) fscanf(f,"%d",&a[i]);
lg[1]=0;
for(i=2;i<=N;++i) lg[i]=lg[i/2]+1;
}
void dinamic()
{
int i,j;
for(i=0;i<N;++i)
m[0][i]=a[i];
for( j=1; (1<<j) < N; ++j )
for( i=0; i + (1<<j)-1 < N; ++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))];
// fprintf(g,"poz - %d ; lung - %d ma- %d\n",i,1<<j,m[j][i]);
}
}
inline int rmq(int i, int j)
{
int k;
k=lg[j-i+1];
if(m[k][i] <= m[k][j-(1<<k)+1]) return m[k][i];
return m[k][j-(1<<k)+1];
}
int main()
{
read();
dinamic();
int x,y;
while(t--)
{
fscanf(f,"%d %d",&x,&y);
fprintf(g,"%d\n",rmq(x-1,y-1));
}
return 0;
}