Pagini recente » Cod sursa (job #3146010) | Cod sursa (job #2792752) | Cod sursa (job #2781801) | Cod sursa (job #2769772) | Cod sursa (job #1514623)
#include <fstream>
//#define minim(a,b) (a<b)?a:b
#define maxim(a,b) (a>b)?a:b
using namespace std;
int v[100001][20];
int log[100000];
int i, k, j, n, c, c2, l, rez;
void citire();
int minim(int x, int y)
{
return x < y ? x : y;
}
ifstream in("rmq.in");
int main(){
for (i = 0; i < 20; i++)
v[0][i] = 500000;
citire();
ofstream out("rmq.out");
for (i = 0; i < k; i++){
in >> c >> c2;
l = log[c2 - c + 1];
out << minim(v[c2][l], v[c + (1 << l) - 1][l]) << '\n';
//out << i << '\n';
}
in.close();
out.close();
return 0;
}
void citire(){
in >> n >> k;
for (i = 1; i <= n; i++){
in >> c;
v[i][0] = c;
}
log[1] = 0;
for (i = 2; i <= n; i++){
if (i == (1 << (log[i - 1] + 1)))
log[i] = 1 + log[i - 1];
else
log[i] = log[i - 1];
}
for (int j = 1; j <= n; j *= 2){
for (i = 1; i <= n; i++){
v[i][j] = minim(v[i][j - 1], v[maxim(i - (1 << j - 1), 0)][j - 1]);
}
}
}