Pagini recente » Cod sursa (job #1000228) | Cod sursa (job #2145177) | Cod sursa (job #3169355) | Cod sursa (job #1251447) | Cod sursa (job #2901565)
#include <iostream>
#include<fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int rmq[18][100001], v[100001], log2[100001];
int main()
{
int M, N;
fin>>N>>M;
for(int i = 1; i<=N; i++){
fin>>v[i];
rmq[0][i] = i;
}
int power = 0, p2 = 1;
for(int i = 1; i<=N; i++){
if(i == p2){
p2 = p2*2;
power++;
}
log2[i] = power-1;
}
int putere = 2;
for(int i = 1; i<=log2[N]; i++){
for(int j = 1; j<=N-putere+1; j++){
if(v[rmq[i-1][j]] < v[rmq[i-1][j+putere/2]])
rmq[i][j] = rmq[i-1][j];
else
rmq[i][j] = rmq[i-1][j+putere/2];
}
putere = putere *2;
}
for(int i = 1; i<=M; i++){
int left, right, mid;
fin>>left>>right;
mid = log2[(right-left+1)];
cout<<v[rmq[mid][left]]<<" "<<v[rmq[mid][right-(1<<mid)+1]];
fout<<min(v[rmq[mid][left]], v[rmq[mid][right-(1<<mid)+1]]);
}
}