Pagini recente » Cod sursa (job #2265832) | Cod sursa (job #1165189) | Cod sursa (job #3162671) | Cod sursa (job #2401406) | Cod sursa (job #2179828)
#include <iostream>
#include <fstream>
#include <vector>
#include <math.h>
using namespace std;
int n,m,A[100005],M[100005][24];
void RMQ()
{
int i,j=1,p;
for(i=0;i<n;i++)
M[i][0]=A[i];
for(j=1,p=2;p<=n;j++,p*=2)
{
for(i=0;i+p-1<n;i++)
{
M[i][j]=min(M[i][j-1],M[i+p/2][j-1]);
}
}
}
void Afisare()
{
for(int i=0;i<n;i++)
{
for(int j=0;j<sqrt(n)+1;j++)
cout<<M[i][j]<<" ";
cout<<"\n";
}
}
int main()
{
int i,x,y,aux,k;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
fin>>n>>m;
for(i=0;i<n;i++)
fin>>A[i];
RMQ();
//Afisare();
for(i=0;i<m;i++)
{
fin>>x>>y;
aux=1;
k=0;
while(aux<=y-x+1)
{
k++;
aux*=2;
}
k--;
aux/=2;
//cout<<aux<<"\n";
fout<<min(M[x-1][k],M[y-1-aux+1][k])<<"\n";
}
fin.close();
fout.close();
return 0;
}