Pagini recente » Cod sursa (job #1901838) | Cod sursa (job #1491799) | Cod sursa (job #1076018) | Cod sursa (job #1076014) | Cod sursa (job #1749748)
//100 puncte
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,m,d[20][100004];
int putere(int n)
{
int s=1,x=2;
while(x<=n)
{
x*=2;
s++;
}
return s-1;
}
void constructie()
{
int i,j,k,p=1;
k=putere(n);
for(i=1;i<=k;i++)
{
for(j=1;j<=n-i;j++)
{
d[i][j]=min(d[i-1][j],d[i-1][j+p]);
}
p<<=1;
}
}
int putere1(int k)
{
int x=1;
while(k!=0)
{
x<<=1;
k--;
}
return x;
}
int rmq(int x, int y)
{
int k=putere(y-x),p=putere1(k),xx;
xx= min(d[k][x],d[k][y-p+1]);
return xx;
}
void citire()
{
fin>>n>>m;
int i,x,y,k=putere(n),j;
for(i=1;i<=n;i++)
fin>>d[0][i];
constructie();
for(i=1;i<=m;i++)
{
fin>>x>>y;
fout<<rmq(x,y)<<'\n';
}
}
int main()
{
citire();
return 0;
}