Pagini recente » Istoria paginii runda/oni2014ziua1_11 | Cod sursa (job #1833738) | Cod sursa (job #1283135) | Cod sursa (job #1643367) | Cod sursa (job #2889271)
#include <iostream>
#include <fstream>
#include <valarray>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, m, x, y;
int a[100002];
int rmq[20][100002];
void RMQ(){
for(int i = 2;i<=n;i++)
a[i] = a[i/2] + 1;
for(int i = 1; (1<<i) <=n; i++)
for(int j = 1; j <= n-(1<<(i-1));j++)
rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j + (1<<(i-1))]);
}
int main() {
f>>n>>m;
for(int i=1;i<=n;i++)
f>>rmq[0][i];
RMQ();
// for(int i = 0;i<=n;i++)
// cout<<a[i]<<" ";
// cout<<endl;
// for(int i = 0;i<=log(n) + 1;i++)
// {
// for(int j = 0;j<=n;j++)
// cout<<rmq[i][j]<<" ";
// cout<<endl;
// }
for(int i = 1;i<=m;i++)
{
f>>x>>y;
int poz = a[y-x+1];
g<<min(rmq[poz][x], rmq[poz][y- (1<<poz) + 1])<<"\n";
}
return 0;
}