Pagini recente » Cod sursa (job #1741660) | Cod sursa (job #142931) | Cod sursa (job #711511) | Cod sursa (job #1343335) | Cod sursa (job #1403213)
#include <iostream>
#include <fstream>
#define nmax 100005
using namespace std;
int n, m;
int EXP[nmax];
int Min[17][nmax];
void preprocess()
{
EXP[1] = 0;
for (int i = 2; i <= n; i++)
EXP[i] = 1 + EXP[i/2];
for (int i = 1; i <= EXP[n]; i++)
for (int j = 1; j <= n - (1<<i) + 1; j++)
{
int st = j;
int dr = j + (1<<i) - 1;
int mid = dr - (1<<(i-1)) + 1;
Min[i][j] = min(Min[i-1][st], Min[i-1][mid]);
}
}
int main()
{
ifstream fi("rmq.in");
ofstream fo("rmq.out");
fi >> n >> m;
for (int i = 1; i <= n; i++)
fi >> Min[0][i];
preprocess();
for (int i = 1; i <= m; i++)
{
int x, y;
fi >> x >> y;
int len = (y - x + 1);
int k = EXP[len];
int minim = Min[k][x];
minim = min(minim, Min[k][y-(1<<k)+1]);
fo << minim << "\n";
}
fi.close();
fo.close();
return 0;
}