Pagini recente » Cod sursa (job #661433) | Cod sursa (job #1174268) | Cod sursa (job #1806180) | Cod sursa (job #664346) | Cod sursa (job #2512170)
#include <iostream>
#include <fstream>
#define ZERO 1000000000
using namespace std;
ifstream fi("rmq.in");
ofstream fo("rmq.out");
int n,q,k,arr[100005], table[100005][20];
int querry(int l, int r)
{
int rez=ZERO;
for(int i=k;i>=0;i--)
{
if(l+(1<<i)-1<=r)
{
rez=min(rez,table[l][i]);
l=l+(1<<i);
}
}
return rez;
}
int main()
{
fi>>n>>q;
for(int i=0;i<n;i++)
fi>>arr[i];
for(int i=0;i<n;i++)
table[i][0]=arr[i];
k=0;
for(int j=1; (1<<j) <=n;j++)
{
k++;
for(int i=0;i+(1<<j)<=n;i++)
table[i][j]=min(table[i][j-1], table[i+(1<<j-1)][j-1]);
}
int l,r;
for(int i=0;i<q;i++)
{
fi>>l>>r;
fo<<querry(l,r)<<'\n';
}
fi.close();
fo.close();
return 0;
}