Pagini recente » Cod sursa (job #1512923) | Cod sursa (job #3220696) | Cod sursa (job #1865299) | Cod sursa (job #2505926) | Cod sursa (job #3291124)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int m[18][100001];
int v[100001];
int w[100001];
int n,M;
void matricia(){
for(int i=0;i<n;i++){
m[0][i]=v[i];
}
for(int p=1;(1<<p)-1<=n;p++){
for(int i=0;i<n;i++){
m[p][i]=m[p-1][i];
int j=i+(1<<(p-1));
if(j<n)
{
m[p][i]=min(m[p][i],m[p-1][j]);
}
}
}
w[0]=0;
for(int i=1;i<n;i++){
w[i]=1+w[(i+1)/2];
}
}
int main()
{
in>>n>>M;
for(int i=0;i<n;i++){
in>>v[i];
}
matricia();
for(int i=0;i<M;i++){
int l,c;
in>>l>>c;
l--;
c--;
int e=w[l-c+1],j=1<<e;
out<<min(m[e][l],m[e][c-j+1])<<'\n';
}
return 0;
}