Pagini recente » Cod sursa (job #3187115) | Cod sursa (job #2381347) | Cod sursa (job #2046697) | Cod sursa (job #675216) | Cod sursa (job #3254122)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int rmq[100001][17], log2[100001];
int main(){
int n, m;
fin >>n>>m;
for(int i = 1; i<=n; i++)
fin >> rmq[i][0]; // a[i] este minimul pe secventa cu 1 element
// logaritmi
log2[1]=0;
for(int i=2; i<=n; i++)
log2[i]=log2[i>>1]+1;
// rmq
for(int j = 1; (1<<j) <= n; j++){ // intervale de lungime 2^j
for(int i =1 ; i + (1<<j)-1 <= n; i++ ) // a[i].......a[?] ........a[i+1^j -1]
rmq[i][j] = min(rmq[i][j-1], rmq[i+(1<<j-1)][j-1]);
}
// cerinte
for( int i=1; i<=m; i++){
int x,y;
fin>>x>>y; // a[x]...........a[y]
int l=y-x+1;
l=log2[l]; // rmq[??][l]
fout<< min( rmq[ x ][ l ] , rmq[y - (1<<l) +1][l] )<<'\n';
}
return 0;
}