Pagini recente » Cod sursa (job #1832432) | Cod sursa (job #2423375) | Cod sursa (job #1678162) | Cod sursa (job #2423429) | Cod sursa (job #1179216)
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <fstream>
using namespace std;
#define in "rmq.in"
#define out "rmq.out"
#define MAXN 100001
#define LOG_MAXN 18
#define MAXM 1000001
int n, m, arr[MAXN], st[MAXN][LOG_MAXN], logn;
int min(int a, int b)
{
return a < b ? a : b;
}
void build_sparse_table()
{
for (int i = 1; i <= n; ++i)
{
st[i][0] = arr[i];
}
for (int j = 1; j <= logn; j++)
{
for (int i = 1; i <= n; ++i)
{
int mini = min(i + (1 << (j - 1)), n);
st[i][j] = min(st[i][j - 1], st[mini][j - 1]);
}
}
}
void read_input()
{
ifstream fin(in);
fin >> n >> m;
logn = log2(n) + 1;
for (int i = 1; i <= n; ++i)
{
fin >> arr[i];
}
build_sparse_table();
ofstream fout(out);
int start, end, imin, ilog;
for (int i = 0; i < m; ++i)
{
fin >> start >> end;
ilog = log2(end - start + 1);
imin = min(st[start][ilog], st[end + 1 - (1 << ilog)][ilog]);
fout << imin << '\n';
}
fin.close();
fout.close();
}
void print_debug()
{
cout << '\n';
for (int i = 1; i <= n; ++i)
{
cout << '\n';
for (int j = 0; j <= logn; j++)
{
cout << st[i][j] << ' ';
}
}
}
void print_solution()
{
ofstream fout(out);
if (fout.is_open())
{
fout.close();
}
}
int main()
{
read_input();
//resolve();
//print_debug();
//print_solution();
//char x;
//cin >> x;
return 0;
}