Pagini recente » Monitorul de evaluare | Cod sursa (job #2077524) | Cod sursa (job #2831940) | Cod sursa (job #1274067) | Cod sursa (job #2752617)
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int const MAX=1e5+3;
int LOGA=17;
int a[MAX];
int mat[MAX][17];
int n,m;
int query(int L, int R)
{
int lung=R-L+1;
int k =1;
while((1<<(k+1)) <= lung)
++k;
return min(mat[L][k],mat[R-(1<<k)+1][k]);
}
int main() {
fin>>n>>m;
for(int i =1; i <= n; ++i)
{
fin>>a[i];
mat[i][0]=a[i];
}
for(int i =1; i < LOGA; ++i)
for(int j =1; j +(1 <<i) -1 <= n; ++j)
mat[j][i]= min(mat[j][i-1],mat[j+(1<<(i-1))][i-1]);
for(int j =1; j <= m; ++j)
{
int x,y;
fin>>x>>y;
fout<<query(x,y)<<"\n";
}
return 0;
}