Pagini recente » Cod sursa (job #1640337) | Cod sursa (job #419028) | Cod sursa (job #2255488) | Cod sursa (job #1708724) | Cod sursa (job #652550)
Cod sursa(job #652550)
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
/*
*
*/
int st[ 18][100001];
int logarithm[100001];
int main(int argc, char** argv) {
ofstream outfile ("rmq.out");
ifstream infile("rmq.in");
int n,m;
infile >> n;
infile >> m;
logarithm[0] = -1;
for ( int i=1; i<=n; i++){
logarithm[i] = logarithm[i/2]+1;
//cout << i << " " << logarithm[i] << endl;
}
int log = logarithm[n];
// cout << endl;
for ( int i=0; i<n; i++ ){
int aux;
infile >> aux;//st[i][0];
st[0][i] = aux;
// cout << " : " << st[i][0] << ", ";
}
//cout << endl;
for ( int k=1; k<=log; k++){
int pow = 1<<(k-1);
for ( int i=0; i<n; i++ ){
//int next = i + (1<<k);
st[k][i] = min( st[k-1][i], st[k-1][ min(n-1,i + pow ) ] );
// cout << st[i][k] << ", " ;
}
//cout << endl;
}
for ( int i=0; i<m; i++){
int a;
int b;
infile >> a >> b;
a--; b--;
int logl = logarithm[ b - a + 1 ];
int sol = min( st[logl][a], st[ logl ][ b - ( 1<<logl) + 1 ]);
outfile << sol << "\n";
}
return 0;
}