Pagini recente » Cod sursa (job #544567) | Cod sursa (job #587155) | Cod sursa (job #594515) | Cod sursa (job #1580088) | Cod sursa (job #1470466)
#include <fstream>
#define N 100002
using namespace std;
int rmq[20][N], Log[N];
/*rmq[i][j] = minimul din vector in intervalul [j, 2^i]
|----|----|
|---------|
*/
int main()
{
int n, m, i, j, x, y, lung;
ifstream f("rmq.in");
ofstream g("rmq.out");
f >> n >> m;
for(i=1; i<=n; ++i)
f >> rmq[0][i];
for(i=2; i < N; ++i)
Log[i] = Log[i>>1] + 1;
for(i=1; i<=Log[n]; ++i)
for(j=1; j-1+(1<<i)<=n; ++j)
rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j+(1<<(i-1))]);
while(m--)
{
f >> x >> y;
lung = Log[y-x+1];
g << min(rmq[lung][x], rmq[lung][y-(1<<lung)+1]) << "\n";
}
f.close();
g.close();
return 0;
}