Pagini recente » Cod sursa (job #2163779) | Cod sursa (job #857144) | Cod sursa (job #1396362) | Cod sursa (job #1871251) | Cod sursa (job #472087)
Cod sursa(job #472087)
// 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[100001][32];
int lg[100001];
void read()
{
fscanf(f, "%d%d", &n, &mm);
for (int i=1; i<=n; i++)
{
fscanf(f, "%d", &v[i]);
m[i][0]=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[k][j-1]]<v[m[l][j-1]])
{
m[k][j]=m[k][j-1];
}
else
m[k][j]=m[l][j-1];
}
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[a][kk]]<v[m[b-(1<<kk)+1][kk]])
fprintf(g, "%d\n", v[m[a][kk]]);
else
fprintf(g, "%d\n", v[m[b-(1<<kk)+1][kk]]);
}
}
int main()
{
read();
program();
return 0;
}