Pagini recente » Cod sursa (job #2890633) | Cod sursa (job #3224279) | Cod sursa (job #1112021) | Cod sursa (job #1064417) | Cod sursa (job #1818725)
#include <fstream>
#include <math.h>
#include <vector>
#include <set>
#include <algorithm>
#include <cstring>
//#include <unordered_map>
#include <iomanip>
#include <time.h>
#include <stdio.h>
#include <bitset>
#include <map>
#define MAX 500000000000
//#include <iostream>
//#include <windows.h>
#include <deque>
using namespace std;
//ifstream cin("jocul.in");
//ofstream cout("jocul.out");
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int ds[16][100001], x;
void construct(int n)
{
int v = log2(n) + 1;
for(int i = 1; i < v; i++)
{
int g = (1<<(i - 1)) - 1;
n -= (g + 1);
for(int j = 0; j < n; j++)
ds[j][i] = min(ds[j][i - 1], ds[j + g + 1][i - 1]);
}
}
int query(int a, int b)
{
a--;
b--;
int val = b - a + 1, index = 0, sum = 1<<30;
while(a <= b){
if(val % 2 != 0){
sum = min(sum, ds[a][index]);
a += (1<<index);
}
val /= 2;
index++;
}
return sum;
}
int main()
{
int n, m;
cin >> n >> m;
for(int i = 0; i < n; i++){
cin >> x;
ds[i][0] = x;
}
construct(n);
for(int i = 0; i < m; i++)
{
int a, b;
cin >> a >> b;
cout << query(a, b) << "\n";
}
return 0;
}