Pagini recente » Cod sursa (job #1074016) | Cod sursa (job #1275903) | Cod sursa (job #1120701) | Cod sursa (job #669679) | Cod sursa (job #926258)
Cod sursa(job #926258)
#include <iostream>
#include <fstream>
#include <string>
#include <string.h>
using namespace std;
const string file = "rmq";
const string infile = file + ".in";
const string outfile = file + ".out";
#define MAXN 100004
#define MAXL 17
int N;
int M;
int A[MAXN];
int lg[MAXN];
int R[MAXL][MAXN];
void citire()
{
ifstream fin(infile.c_str());
fin >> N >> M;
for(int i = 1; i <= N; i++)
{
fin >> A[i];
}
for(int i = 2; i <= N; i++)
{
lg[i] = lg[i / 2] + 1;
}
for(int i = 1; i <= N; i++)
{
R[0][i] = A[i];
}
for(int i = 1; i <= lg[N]; i++)
{
for(int j = 1; j <= N - (1 << (i - 1)); j++)
{
R[i][j] = min(R[i - 1][j], R[i - 1][j + (1 << (i - 1))]);
}
}
ofstream fout(outfile.c_str());
for(int i = 0; i < M; i++)
{
int x;
int y;
fin >> x >> y;
int len = y - x + 1;
int p2 = lg[len];
int toAdd = len - (1 << p2);
fout << min(R[p2][x], R[p2][x + toAdd]) << "\n";
}
fout.close();
fin.close();
}
int main()
{
citire();
}