Pagini recente » Cod sursa (job #1687511) | Cod sursa (job #1482508) | Cod sursa (job #2047782) | Cod sursa (job #2730213) | Cod sursa (job #1491811)
#include <bits/stdc++.h>
#define nmax 100005
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int P2[nmax],a[nmax],rmq[17][nmax];
int n,m;
void Build_P2()
{
P2[1] = 0;
for(int i = 2;i<=n;i++)
P2[i] = 1+P2[i/2];
}
void Build_RMQ()
{
int i,P,j,putere,d2;
for(i=1;i<=n;i++)
rmq[0][i] = a[i];
P = P2[n];
for(i=1;i<=P;i++)
{
putere = (1<<i);
d2 = (1<<(i-1));
for(j=1;j<=n-putere+1;j++)
rmq[i][j] = min(rmq[i-1][j],rmq[i-1][j+d2]);
}
}
int main()
{
int i,x,y,L,sol;
fin>>n>>m;
for(i=1;i<=n;i++) fin>>a[i];
Build_P2();
Build_RMQ();
for(i=1;i<=m;i++)
{
fin>>x>>y;
if(x>y) swap(x,y);
L = (y-x)+1;
L = P2[L];
sol = min(rmq[L][x],rmq[L][y-L]);
fout<<sol<<"\n";
}
fout.close();
return 0;
}