Pagini recente » Cod sursa (job #1677064) | Cod sursa (job #1103365) | Cod sursa (job #1819825) | Cod sursa (job #1266156) | Cod sursa (job #472266)
Cod sursa(job #472266)
// RangeMinimumQuery.cpp : Defines the entry point for the console application.
//
//#include "stdafx.h"
#include "stdio.h"
#include "math.h"
FILE *f=fopen("rmq.in", "r");
FILE *g=fopen("rmq.out", "w");
int n, mm, v[100001];
int m[18][100001];
int lg[100001];
void read()
{
fscanf(f, "%d%d", &n, &mm);
for (int i=1; i<=n; i++)
{
fscanf(f, "%d", &v[i]);
m[0][i]=i;
}
for (int j=1; (1<<j)<=n; ++j)
for (int k=1; k+(1<<j)-1<=n; ++k)
{
int l=k+(1<<(j-1));
if (v[m[j-1][k]]<v[m[j-1][l]])
{
m[j][k]=m[j-1][k];
}
else
m[j][k]=m[j-1][l];
}
lg[0]=-1;
for (int o=1; o<=n; o++)
lg[o]=lg[o/2]+1;
}
void program()
{
for (int o=1; o<=mm; ++o)
{
int a, b;
fscanf(f, "%d%d", &a, &b);
int kk=lg[b-a+1];
if (v[m[kk][a]]<v[m[kk][b-(1<<kk)+1]])
fprintf(g, "%d\n", v[m[kk][a]]);
else
fprintf(g, "%d\n", v[m[kk][b-(1<<kk)+1]]);
}
}
int main()
{
read();
program();
return 0;
}