Pagini recente » Cod sursa (job #1078726) | Cod sursa (job #1171419) | Cod sursa (job #3029992) | Cod sursa (job #2562986) | Cod sursa (job #2766542)
#include <bits/stdc++.h>
using namespace std;
#define f cin
#define g cout
#define int long long
const int Max = 1e5 + 1;
void nos()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
}
namespace SparseTables{
int ST[21][Max];
int LOG2[Max];
int n;
void precomputeLog2()
{
int i;
for(i=2;i<=n;i++)
LOG2[i] = LOG2[i>>1] + 1;
}
int merge(int a, int b)
{
//edit merge for diferent function
return min(a,b);
}
void Init(std::vector< int > v)
{
int i,j;
n = v.size() - 1;
precomputeLog2();
for(i=0;i<v.size();++i)
ST[0][i] = v[i];
for( i = 1; (1<<i) <= n;++i)
for(j = 0; j + (1<<i) - 1<= n;++j)
ST[i][j] = merge(ST[i-1][j],ST[i-1][j + (1<<(i-1))]);
}
int ConstantQueryMinMax(int left, int right)
{
if(left > right)
swap(left,right);
int k = LOG2[right - left + 1];
return merge(ST[k][left],ST[k][right - (1<<k) + 1]);
}
}
int n,m;
vector < int > v;
ifstream f("rmq.in");
ofstream g("rmq.out");
void read()
{
f>>n>>m;
int i;
for(i=1;i<=n;i++)
{
int x;
f>>x;
v.push_back(x);
}
SparseTables::Init(v);
}
void solve()
{
while(m -- )
{
int left, right;
f>>left>>right;
left --;
right --;
g<<SparseTables::ConstantQueryMinMax(left,right)<<'\n';
}
}
void restart()
{
}
int32_t main()
{
nos();
read();
solve();
restart();
return 0;
}