Pagini recente » Cod sursa (job #2767537) | Cod sursa (job #2497125) | Cod sursa (job #561499) | Cod sursa (job #619164) | Cod sursa (job #2819507)
#include <iostream>
#include <fstream>
#include <stdio.h>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int MAXN = 100000;
const int MAX_LOG = 16;
int v[MAXN];
int table[MAXN][MAX_LOG];
int f( int a, int b ){
return min(a, b);
}
void buildTable( int n ){
int p, i, pow;
for( i = 0; i < n; i++ )
table[i][0] = v[i];
for( p = 1; p <= MAX_LOG; p++ ){
pow = 1 << p;
//out<<"putere: "<<p<<" ";
for( i = 0; i + pow - 1 < n; i++ ){
table[i][p] = f(table[i][p - 1], table[i + (1 << (p - 1))][p - 1]);
//out<<table[i][p]<<" ";
}
}
}
int log_two( int a ){
int p;
p = 0;
while(a > 1){
p++;
a /= 2;
}
return p;
}
int query( int x, int y ){
int a;
a = log_two((y - x) + 1);
//out<<x<<" "<<y<<" "<<a<<'\n';
return f(table[x][a], table[y - (1 << a) + 1][a]);
}
int main(){
int n, m, i, x, y;
in>>n>>m;
for( i = 0; i < n; i++ ){
in>>v[i];
}
buildTable(n);
for( i = 0; i < m; i++ ){
in>>x>>y;
out<<query(x - 1, y - 1)<<'\n';
}
return 0;
}