Pagini recente » Cod sursa (job #1329227) | Cod sursa (job #1354181) | Cod sursa (job #3283229)
#include <iostream>
using namespace std;
// punem 33 pt ca ar trebi sa fie log2(n) da log2(INT_MAX) ii 32 asa ca ajunge numa 33
int n, m, rmq[33][100001], // matricea unde se precalculeaza si saveaza rmq
lg2[100001]; // momoram log2(x) pt ca ar dura prea mult sa calculam log2 de fiecare data
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
freopen("rmq.in", "r", stdin);
cin>>n>>m;
for (int i=1; i<=n; ++i){
cin>>rmq[0][i];
if (i>1) lg2[i]=1+lg2[i>>1]; // initializam lg2 cu 1+lg(ultima putere a lui 2 dinainte)
}
for(int i=1; i<=lg2[n]; ++i){
for(int j=(1<<i); j<=n; ++j){
rmq[i][j]=min(rmq[i-1][j-(1<<(i-1))], rmq[i-1][j]);
}
}
freopen("rmq.out", "w", stdout);
while (m--){
int x, y;
cin>>x>>y;
int l=lg2[y-x+1];
cout<<min(rmq[l][x+(1<<l)-1], rmq[l][y])<<"\n";
}
return 0;
}