Pagini recente » christmas-balls | painting | Monitorul de evaluare | Profil Cristi_Sima | Cod sursa (job #941369)
Cod sursa(job #941369)
#include <fstream>
using namespace std;
int N, M;
int v[100011];
int dp[100011][19];
void Precalc_ST ()
{
for (int j = 1; 1 << j <= N; j++)
for (int i = 0; i + (1 << j) - 1 < N; i++)
if (v[dp[i][j - 1]] < v[dp[i + (1 << (j - 1))][j - 1]]) dp[i][j] = dp[i][j - 1];
else dp[i][j] = dp[i + (1 << (j - 1))][j - 1];
}
int main ()
{
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
fin >> N >> M;
for (int i = 0; i < N; i++)
fin >> v[i], dp[i][0] = i;
Precalc_ST ();
for (int i, j, k; M; M--)
{
fin >> i >> j;
i--, j--;
for (k = 0; (1 << k) <= (j - i + 1); k++);
k--;
if (v[dp[i][k]] <= v[dp[j - (1 << k) + 1][k]]) fout << v[dp[i][k]] << "\n";
else fout << v[dp[j - (1 << k) + 1][k]] << "\n";
}
fin.close ();
fout.close ();
return 0;
}