Pagini recente » Cod sursa (job #168188) | Cod sursa (job #1635050) | Cod sursa (job #1484279) | Cod sursa (job #1824369) | Cod sursa (job #1765305)
#include<bits/stdc++.h>
using namespace std;
int v[100010];
int M[100010][19];
int n, m, x, y, k;
int compute(int x , int y)
{
int el = log2( y - x + 1);
if(v[ M[ x ][ el ] ] <= v[ M[ y - (1<<k) + 1][ k ] ] )
return v[ M[ x ][ k ] ];
else
return v[ M[ y - (1<<k) + 1][ k ] ];
}
int main()
{
ifstream in("rmq.in");
ofstream out("rmq.out");
in >> n >> m;
for(int i = 0; i < n; i++)
{
in >> v[i];
M[i][0] = i;
}
for(int j = 1; 1<<j <= n ; j++)
{
for(int i = 0 ; i + (1<<j) - 1 < n ;i++)
{
if( v[ M[ i ][ j - 1 ] ] < v[ 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 (int i = 0; i < m ; i++)
{
in >> x >> y;
x--;y--;
out<<compute(x , y) << '\n';
}
return 0;
}