Pagini recente » Cod sursa (job #1520273) | Cod sursa (job #456168) | Cod sursa (job #1566537) | Cod sursa (job #127577) | Cod sursa (job #2870838)
#include <bits/stdc++.h>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int N=1e5,k=20;
int v[N+5];
int sparset[N+5][k+5];
void init(int n)
{
for (int i = 0; i < n; i++)
sparset[i][0] = v[i];
for (int j = 1; (1 << j) <= n; j++)
for (int i = 0; (i + (1 << j) - 1) < n; i++)
sparset[i][j]=min(sparset[i][j - 1],sparset[i + (1 << (j - 1))][j - 1]);
}
int query(int st,int dr)
{
int j = (int)log2(dr - st + 1);
return min(sparset[st][j] , sparset[dr - (1 << j) + 1][j]);
}
int main()
{
int n,m; in>>n>>m;
for(int i=0; i<n; i++) in>>v[i];
init(n);
for(int i=1; i<=m; i++)
{
int x,y; in>>x>>y;
out<<query(x-1,y-1)<<'\n';
}
return 0;
}