Pagini recente » Cod sursa (job #629914) | Cod sursa (job #195469) | Cod sursa (job #792170) | Cod sursa (job #1383653) | Cod sursa (job #2754544)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
const int value=100000;
int n,m;
const int logar=log(value)+1;
int input[value];
int sparse[value][6];
void preprocesare (int input[], int n)
{
for(int i=0;i<n;i++)
sparse[i][0]=i;
for(int j=1;pow(2,j)<=n;j++)
{
int pw2=pow(2,j-1);
for(int i=0;i+pow(2,j)-1<n;i++)
if(input[sparse[i][j-1]]
<input[sparse[i+pw2][j-1]])
sparse[i][j]=sparse[i][j-1];
else
sparse[i][j]=sparse[i+pw2][j-1];
}
}
int rmq(int st,int dr)
{ int l,k;
l = dr-st+1;
k = log(l);
int pw2=pow(2,k);
return min(input[sparse[st][k]],input[sparse[st+l-pw2][k]]);
}
int main()
{
int x,y;
f>>n>>m;
for(int i=0;i<n;i++)
f>>input[i];
preprocesare(input,n);
for(int i=0;i<m;i++)
{
f>>x>>y;
if(x!=y)
g<<rmq(x-1,y-1)<<endl;
}
return 0;
}