Pagini recente » Cod sursa (job #894257) | Cod sursa (job #1951860) | Cod sursa (job #2732107) | Cod sursa (job #357997) | Cod sursa (job #2490986)
#include<bits/stdc++.h>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int values[100000],n,m;
int lookup[100000][21];
void read()
{
in>>n>>m;
for(int i=0; i<n; i++)
in>>values[i];
}
void create_lookup()
{
for(int i=0; 1<<i <=n; i++)
{
int pp=1<<i,last=1<<(i-1);
for(int k=0; k<=n-pp; k++)
{
if(i==0)
{
lookup[k][i]=values[k];
}
else
{
lookup[k][i]=min(lookup[k][i-1],lookup[k+last][i-1]);
}
}
}
}
int get_minimum_interval(int a,int b)
{
int j=log2((b-a+1));
return min(lookup[a][j],lookup[b-(1<<j)+1][j]);
}
void solve()
{
int a,b;
for(int i=0; i<m; i++)
{
in>>a>>b;
out<<get_minimum_interval(a-1,b-1)<<'\n';
}
}
int main()
{
read();
create_lookup();
solve();
return 0;
}