Pagini recente » Cod sursa (job #1564500) | Cod sursa (job #2955037) | Cod sursa (job #706366) | Cod sursa (job #1929922) | Cod sursa (job #1959144)
#include <iostream>
#include <fstream>
#define NMAX 100005
#define LOGN 34
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
unsigned int d[LOGN][NMAX],x,y,m,n,a[NMAX],lg;
int logN(int n)
{
int i;
for(i=0;(1<<i)<=n;i++);
return i;
}
void req()
{
for(int i=0;i<n;i++) d[0][i] = a[i];
for(int i=1;i<=lg;i++)
{
for(int j=0;j<n;j++)
{
if(n-j+1-(1<<i)>0)
{
d[i][j] = min(d[i-1][j],d[i-1][j+(1<<(i-1))]);
}
}
}
}
void af()
{
for(int i=0;i<lg;i++){
for(int j=0;j<n;j++)
{
cout << d[i][j] << " ";
}
cout << endl;
}
}
int putere;
int rmq(int x,int y)
{
putere = logN(y-x+1)-1;
return min(d[putere][x],d[putere][y+1-(1<<putere)]);
}
int main()
{
in >> n >> m;
for(int i=0;i<n;i++){
in >> a[i];
}
lg = logN(n)+1;
req();
// af();
for(int i=0;i<m;i++) {
in >> x >> y;
out << rmq(x-1,y-1) << "\n";
}
return 0;
}