Pagini recente » Cod sursa (job #2021224) | Cod sursa (job #1661135) | Cod sursa (job #876167) | Cod sursa (job #630557) | Cod sursa (job #969122)
Cod sursa(job #969122)
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int minimum_result[17][100002],log[100002],Arr[100002],N,M;
void Calculate_log2()
{
int i=2,next=2;
while(i<=N)
{
if(i!=next)
log[i]=log[i-1];
else
{
log[i]=log[i-1]+1;
next=i*2;
}
i++;
}
}
void Read()
{
f>>N>>M;
int i;
for(i=1;i<=N;i++)
{
f>>Arr[i];
minimum_result[0][i]=Arr[i];
}
}
void Build_matrichs()
{
int i,j,forward=1;
for(i=1;i<=log[N];i++)
{
for(j=1;j<=N-forward*2+1;j++)
minimum_result[i][j]=min(minimum_result[i-1][j],minimum_result[i-1][j+forward]);
forward*=2;
}
}
int power(int x,int y)
{
int i,p=1;
for(i=1;i<=y;i++)
p*=x;
return(p);
}
void Solve()
{
int i;
for(i=1;i<=M;i++)
{
int x,y;
f>>x>>y;
int how_much=log[y-x+1];
if(log[y-x]==how_much-1)
g<<minimum_result[log[y-x+1]][x]<<"\n";
else
g<<min(minimum_result[how_much][x],minimum_result[how_much][y-power(2,how_much)+1])<<"\n";
}
}
int main()
{
Read();
Calculate_log2();
Build_matrichs();
Solve();
return 0;
}