Pagini recente » Cod sursa (job #2947008) | Cod sursa (job #3136586) | Cod sursa (job #2050452) | Cod sursa (job #3274088) | Cod sursa (job #3194541)
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
string file = "s";
ifstream fin (file + ".in");
ofstream fout (file + ".out");
const int N = 100000, K = 17;
int r[K+1][N+1],n;
int cb(int val)
{
int st = 0, dr = 17;
while (st <= dr)
{
int mid = (st+dr)/2;
if ((1<<mid) <= val)
{
st = mid + 1;
}
else
{
dr = mid -1;
}
}
return dr;
}
void rmq()
{
int m = cb(n);
for (int i=1; i<=m; i++)
{
int k = n - (1<<(i-1));
for (int j=1; j<=k; j++)
{
r[i][j] = min(r[i-1][j],r[i-1][j+(1<<(i-1))]);
}
for (int j=k+1; j<=n; j++)
{
r[i][j] = r[i-1][j];
}
}
for (int i=0; i<=m; i++)
{
for (int j=1; j<=n; j++)
cout << r[i][j] << ' ';
cout << '\n';
}
}
int interogare(int st, int dr)
{
int m = cb((dr-st+1));
return min(r[m][st],r[m][dr-(1<<m)+1]);
}
int main ()
{
int m,x,y;
fin >> n >> m;
for (int i=1; i<=n; i++)
{
fin >> r[0][i];
}
rmq();
for (int i=1; i<=m; i++)
{
fin >> x >> y;
fout << interogare(x,y) << '\n';
}
}