Pagini recente » Cod sursa (job #1738940) | Cod sursa (job #860879) | Cod sursa (job #1581446) | Cod sursa (job #2045192) | Cod sursa (job #3226087)
#include<fstream>
#define nmax 100005
#define lgmax 20
#pragma GCC optimize ("unroll-loops")
std::ifstream fin("rmq.in");
std::ofstream fout("rmq.out");
int rmq[nmax][lgmax];
int lg[nmax];
int n, q;
void precalc()
{
fin>>n>>q;
lg[1]=0;
for(int i=2; i<=n; ++i)
lg[i]=lg[i/2]+1;
for(int i=1; i<=n; ++i)
fin>>rmq[i][0];
for(int i=1; (1<<i)<=n; ++i)
for(int j=1; j<=n-(1<<i)+1; ++j)
{
int l=(1<<(i-1));
rmq[j][i]=std::min(rmq[j][i-1], rmq[j+l][i-1]);
}
}
void solve()
{
for(int i=0; i<q; ++i)
{
int l, r;
fin>>l>>r;
int dist=r-l+1;
int aux=lg[dist], rem=dist-(1<<aux);
fout<<std::min(rmq[l][aux], rmq[l+rem][aux])<<'\n';
}
}
int main()
{
std::ios_base::sync_with_stdio(false);
precalc();
solve();
return 0;
}