Pagini recente » Cod sursa (job #2797424) | Cod sursa (job #2468716) | Cod sursa (job #624158) | Cod sursa (job #1106541) | Cod sursa (job #2450206)
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
ifstream in ("rmq.in");
ofstream out ("rmq.out");
int n,i,j,m[60000][60000],a[1000010],c,x,y,k;
int main()
{
in>>n;
in>>c;
for(i=0;i<n;i++)
{in>>a[i];
}
for(i=0;i<n;i++)m[i][0]=i;
for (j = 1; 1 << j <= n; j++)
for (i = 0; i + (1 << j) - 1 < n; i++)
if (a[m[i][j - 1]] < a[m[i + (1 << (j - 1))][j - 1]])
m[i][j] = m[i][j - 1];
else
m[i][j] = m[i + (1 << (j - 1))][j - 1];
/*
for(j=0;1<<j<=n;j++)
{for(i=0;i+(1<<j)-1<n;i++) cout<<i<<" "<<(1<<j)<<" "<<a[m[i][j]]<<endl;;
cout<<endl;
}*/
for(i=1;i<=c;i++)
{in>>x>>y;
x--;y--;
k=log(y-x+1);
if(a[m[x][k]]<a[m[y-(1<<k)+1][k]])out<<a[m[x][k]]<<"\n";
else{out<<a[m[y-(1<<k)+1][k]]<<"\n";}
}
return 0;
}