Pagini recente » Cod sursa (job #2778810) | Cod sursa (job #511502) | Cod sursa (job #1945454) | Borderou de evaluare (job #2102912) | Cod sursa (job #1047088)
#include <iostream>
#include <fstream>
#include <vector>
std::ifstream fin("rmq.in");
std::ofstream fout("rmq.out");
int n, m;
//std::vector<int> rmq[100001];///[10001];
int rmq[18][100001];
int lg[100001];
int vec[100001];
int max(int a, int b)
{
if(a > b)
{
return a;
}
return b;
}
int min(int a, int b)
{
if(a < b)
{
return a;
}
return b;
}
void citire()
{
int p;
fin>>n>>m;
for(int i = 0; i < n; i++)
{
fin>>vec[i];
rmq[0][i] = vec[i];
}
for(int i = 2; i <= n; i++)
{
lg[i] = lg[i / 2] + 1;
}
for(int i = 1; (1<<i) <= n; i++)
{
for(int j = 0; j < n - (1<<i) + 1; j++)
{
int l = 1<<(i-1);
rmq[i][j]= min(rmq[i - 1][j] , rmq[i - 1][j + l]);
}
}
int p1, p2;
for(int i = 0; i < m; i++)
{
fin>>p1>>p2;
p1--;
p2--;
int lengInit = p2 - p1 + 1;
int lengAfter = lg[lengInit];
int lengLeft = lengInit - (1<<lengAfter);
fout<<min(rmq[lengAfter][p1], rmq[lengAfter][p1 + lengLeft])<<'\n';
}
}
int main()
{
citire();
return 0;
}