Pagini recente » Cod sursa (job #2041563) | Cod sursa (job #1147716) | Cod sursa (job #3209163) | Cod sursa (job #2281365) | Cod sursa (job #2625716)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int RMQ[20][100002];
void Make_RMQ(int n){
for(int i = 1; (1<<i) <= n; i++)
for(int j = 0; j + (1 << i) - 1 < n; j++){
if(RMQ[i - 1][j] < RMQ[i - 1][j + (1<<(i-1))])
RMQ[i][j] = RMQ[i - 1][j];
else
RMQ[i][j] = RMQ[i - 1][j + (1<<(i-1))];
}
}
int query(int st, int dr){
int j = 0;
while((1 << j) < dr - st + 1)
j++;
j--;
if(RMQ[j][st] <= RMQ[j][dr - (1 << j) + 1])
return RMQ[j][st];
return RMQ[j][dr - (1 << j) + 1];
}
int main()
{
int n, m;
fin >> n >> m;
for(int i = 0; i < n; i++)
fin >> RMQ[0][i];
Make_RMQ(n);
for(int i = 0; i < m; i++)
{
int st, dr;
fin >> st >> dr;
fout << query(st - 1, dr - 1) << '\n';
}
return 0;
}