Pagini recente » Cod sursa (job #1073861) | Cod sursa (job #456531) | Cod sursa (job #2982582) | Cod sursa (job #450663) | Cod sursa (job #2199400)
#include <iostream>
#include <fstream>
#define infinit 999999999
using namespace std;
ifstream f("date.in");
ofstream g("date.out");
int v[100001], log[100001];
int dp[100001][22];
int n, m;
int minim(int a, int b)
{
if(a < b)
return a;
return b;
}
int interogare(int x, int y)
{
if(x == y)
return v[x];
else
{
int dif;
dif = y - x + 1 ;
return minim(dp[x][log[dif]], dp[y-1<<log[dif] + 1][y]);
}
}
int main()
{
f >> n;
f >> m;
int i, j, x , y;
for(i = 0; i < n; i++)
f >> v[i];
for(i = 0; i < 100001; i++)
for(j = 0; j < 16; j++)
dp[i][j] = infinit;
for(i = 0; i < n; i++)
dp[i][0] = minim(v[i], v[i+1]);
dp[n-1][0] = v[n-1];
///precalculare log
j = 0;
for(i = 1; i <= n; i++)
{
if(i >= 1 << j && i < 1 << (j+1))
log[i] = j;
else
{
j++;
log[i] = j;
}
}
for(j = 1; j < 16; j++)
{
for(i = 0;i < n; i++)
{
dp[i][j] = minim(dp[i][j-1], dp[i + 1 << (j-1)][j-1]);
}
}
for(i = 0 ; i < m ; i++)
{
f >> x >> y;
g << interogare(x-1, y-1) << '\n';
}
}