Pagini recente » Cod sursa (job #1761843) | Autentificare | Cod sursa (job #1268085) | Cod sursa (job #2002548) | Cod sursa (job #235750)
Cod sursa(job #235750)
#include <cstdio>
const int maxn = 100001;
const int maxlg = 18;
FILE *in = fopen("rmq.in","r"), *out = fopen("rmq.out","w");
int n, m;
int lg[maxn];
int rmq[maxlg][maxn];
void read()
{
fscanf(in, "%d %d", &n, &m);
for ( int i = 1; i <= n; ++i )
fscanf(in, "%d", &rmq[i][0]);
for ( int i = 2; i <= n; ++i )
lg[i] = lg[i >> 1] + 1;
}
inline int min(int x, int y)
{
return x < y ? x : y;
}
int main()
{
read();
for ( int j = 1; (1 << j) <= n; ++j )
for ( int i = 1; i + (1 << (j - 1)) <= n; ++i )
{
int t = i + (1 << (j - 1));
rmq[j][i] = min(rmq[j - 1][i], rmq[j - 1][t]);
}
int x, y;
for ( int i = 1; i <= m; ++i )
{
fscanf(in, "%d %d", &x, &y);
int log = lg[y - x + 1];
int diff = y - (1 << log) + 1;
fprintf(out, "%d\n", min(rmq[log][x], rmq[log][diff]));
}
return 0;
}