Pagini recente » Cod sursa (job #2987149) | Cod sursa (job #3147898) | Cod sursa (job #822435) | Cod sursa (job #1946613) | Cod sursa (job #1627672)
#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[i / 2] + 1;
r = VVI(n + 1, VI(20));
for ( int i = 1; i <= n; ++i )
is >> r[i][0];
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;
}