Pagini recente » Cod sursa (job #836087) | Istoria paginii runda/rcpc-2019/clasament | Cod sursa (job #7943) | Cod sursa (job #411364) | Cod sursa (job #384964)
Cod sursa(job #384964)
#include <fstream>
#define DIMN 100005
#define DIML 25
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int RMQ [DIMN][DIML], x, log [DIMN], i, j, N, M, k, p;
// RMQ [i][j] - > subsecventa de lungime 2^j avand inceputul in i ;
inline int min (int a, int b) {
if (a <= b) return a;
return b;
}
inline void solve ()
{
fin >> N >> M;
fin >> x;
RMQ [1][0] = x;
for (i = 2; i <= N; i++) {
fin >> x;
RMQ [i][0] = x;
log [i] = log [i >> 1] + 1;
}
for (j = 1; (1 << j) <= N; j++)
for (p = 1 << j - 1, i = 1; i + p <= N; i++) // i + 2 ^ (j-1)
RMQ [i][j] = min (RMQ [i] [j - 1], RMQ [ i + p ] [j - 1]) ;
// intervalul ce incepe cu i sau i + 2^j-1 - 1 de lungime 2 ^ j - 1 ( in total 2^j );
while (M--)
{
fin >> i >> j;
k = j - i + 1;
k = log [k];
fout << min ( RMQ [i] [k], RMQ [j - (1 << k) + 1 ] [k]) << "\n";
}
}
int main ()
{
solve ();
return 0;
// stiu...cam sec main-ul :)
}