Pagini recente » Cod sursa (job #1610790) | Cod sursa (job #1003647) | Cod sursa (job #2724991) | Cod sursa (job #1639344) | Cod sursa (job #2862934)
/*
__
_.--"" |
.----. _.-' |/\| |.--.
| |__.-' _________| |_) _______________
| .-""-.""""" ___, `----'")) __ .-""-.""""--._
'-' ,--. ` |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)+1][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=2;i<=n;i++){
log_2[i] = log_2[i/2]+1;
}
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]);
}
}
while(m--){
in>>a>>b;
out<<min_interval(a-1,b-1)<<'\n';
}
return 0;
}