Pagini recente » Cod sursa (job #63409) | Cod sursa (job #3256293) | Cod sursa (job #2773265) | Cod sursa (job #559557) | Cod sursa (job #3001643)
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,m,a[100001],T[100001][30],p,max_p,k;
int querry(int x,int y)
{
int len=y-x+1,min1=100001;
while(len>0)
{
int p=0;
while(1<<p <= len)
p++;
p--;
min1=min(min1,T[x][p]);
x+=1<<p;
len=y-x+1;
}
return min1;
}
int main()
{
f>>n>>m;
for(int i=1;i<=n;i++)
f>>T[i][0];
max_p=1;
while(max_p<=n)
{
max_p=max_p*2;
k++;
}
max_p=max_p/2;
k--;
p=1;
for(int j=1;j<=k;j++)
{
for(int i=1;i+2*p-1<=n;i++)
T[i][j]=min(T[i][j-1],T[i+p][j-1]);
p=p*2;
}
for(int q=1;q<=m;q++)
{
int x,y;
f>>x>>y;
g<<querry(x,y)<<'\n';
}
f.close();
g.close();
return 0;
}