Pagini recente » Cod sursa (job #2228123) | Cod sursa (job #1642631) | Cod sursa (job #2679917) | Cod sursa (job #1627756) | Cod sursa (job #2862838)
/*
__
_.--"" |
.----. _.-' |/\| |.--.
| |__.-' _________| |_) _______________
| .-""-.""""" ___, `----'")) __ .-""-.""""--._
'-' ,--. ` |Cezar| .---. |:.| ' ,--. ` _`.
( ( ) ) __| 7 |__\\|// _..-- \/ ( ( ) )--._".-.
. `--' ;\__________________..--------. `--' ;--------'
`-..-' `-..-'
*/
#include <iostream>
#include <fstream>
using namespace std;
const int N = 1e5 + 5;
const int LOG = 18;
int dp[N][LOG], log_2[N];
int min_interval(int a, int b){
int lungime = b-a+1;
int log_lungime_interval = log_2[lungime];
int primul_interval = dp[a][log_lungime_interval];
int al_doilea_interval = dp[b-(1<<log_lungime_interval)][log_lungime_interval];
return min(primul_interval,al_doilea_interval);
}
int main() {
ifstream in("rmq.in");
ofstream out("rmq.out");
int n,m,a,b;
in>>n>>m;
for(int i = 0;i < n;i++){
in>>dp[i][0];
}
for(int i=1;i<LOG;i++){
for(int j=0;j + (1<<i) -1 <n;j++){
dp[j][i] = min(dp[j][i-1],dp[j + (1<<(i-1))][i-1]);
}
}
for(int i = 2; i<=n;i++){
log_2[i] = log_2[i/2] + 1;
}
while(m--){
in>>a>>b;
out<<min_interval(a,b)<<'\n';
}
return 0;
}