Pagini recente » Cod sursa (job #1053557) | Cod sursa (job #297962) | Cod sursa (job #1904391) | Cod sursa (job #1769610) | Cod sursa (job #772902)
Cod sursa(job #772902)
#include <fstream>
#include <cmath>
#include <algorithm>
#define MOD 100000
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int A[MOD], Min[18][100000], n, m;
void Citire()
{
int i,j;
f>>n>>m;
for(i=0;i<n;++i)
f>>A[i];
for(j=0;j<n;++j) Min[0][j]=A[j];
}
void Procesare(){
int i,j,l1;
for(j=1;(1<<j)<=n;++j)
{
l1=1<<j;
for(i=0;i+l1-1<n;++i)
{
Min[j][i]=Min[j-1][i];
Min[j][i]=min(Min[j][i],Min[j-1][i+(1<<(j-1))]);
}
}
}
int Query(int a,int b){
int min,k;
k=(int)log2(b-a);
if(Min[k][a]<Min[k][b-(1<<k)+1]) min=Min[k][a];
else min=Min[k][b-(1<<k)+1];
return min;
}
void Raspunsuri(){
int a,b;
while(m--)
{
f>>a>>b;
g<<Query(a-1,b-1)<<"\n";
}
}
int main(){
Citire();
Procesare();
Raspunsuri();
return 0;
}