Pagini recente » Cod sursa (job #699263) | Cod sursa (job #69765) | Cod sursa (job #609908) | Cod sursa (job #573778) | Cod sursa (job #3226866)
#include <iostream>
#include <fstream>
using namespace std;
int rmq[100005][20];
int join (int a, int b)
{
return min(a, b);
}
void build (int n)
{
int cnt=1;
int put=2;
while (put<=n)
{
for (int i=1; i<=n-put+1; i++)
{
rmq[i][cnt]=join(rmq[i][cnt-1], rmq[i+put/2][cnt-1]);
}
put*=2;
cnt++;
}
return;
}
int main()
{
ifstream cin ("rmq.in");
ofstream cout ("rmq.out");
int n, m, l, r;
cin>>n>>m;
for (int i=1; i<=n; i++)
{
cin>>rmq[i][0];
}
build (n);
for (int i=0; i<=3; i++)
{
for (int j=1; j<=n; j++)
{
//cout<<rmq[j][i]<<" ";
}
//cout<<'\n';
}
int length=0;
int cnt=0, put=1;
for (int i=1; i<=m; i++)
{
cnt=0, put=1;
cin>>l>>r;
length=r-l+1;
while (2*put<=length)
{
cnt++;
put*=2;
}
cout<<join(rmq[l][cnt], rmq[r-put+1][cnt])<<'\n';
//cout<<rmq[l][cnt]<<" "<<rmq[r-put+1][cnt]<<'\n';
}
}