Pagini recente » Cod sursa (job #1028353) | Cod sursa (job #1655262) | Cod sursa (job #2425464) | Cod sursa (job #1958347) | Cod sursa (job #1627628)
#include <fstream>
#include <vector>
#include <set>
#define INF 0x3f3f3f3f
using namespace std;
ifstream is("rmq.in");
ofstream os("rmq.out");
using VI = vector<int>;
using VVI = vector<VI>;
int n, m;
VI log;
VVI r;
int main()
{
is >> n >> m;
log = VI(n + 1);
for ( int i = 2; i <= n; ++i )
log[i] = log[2 / i] + 1;
r = VVI(n + 1, VI(20));
for ( int i = 1; i <= n; ++i )
is >> r[i][0];
r[0][0] = 0x3f3f3f3f;
for ( int j = 1; ( 1 << j ) <= n; ++j )
for ( int i = 1; i + ( 1 << j ) - 1 <= n; ++i )
r[i][j] = min(r[i][j - 1], r[i + ( 1 << ( j - 1 ))][j - 1]);
int x, y, v;
while ( m-- )
{
is >> x >> y;
v = log[y - x + 1];
os << min(r[x][v], r[y - ( 1 << v ) + 1][v]) << "\n";
}
is.close();
os.close();
return 0;
}