Pagini recente » Cod sursa (job #2316518) | Cod sursa (job #2364429) | Cod sursa (job #1660741) | Cod sursa (job #1380406) | Cod sursa (job #1789909)
#include <iostream>
#include<fstream>
#include<math.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int r[100001][20],n,m,i,v[100001],putere[17],x,y;
void BuildRmq()
{
int i,j;
for(i=0;i<n;i++)
r[i][0]=i;
for(j=1;putere[j]<=n;j++)
for(i=0;i+putere[j]<=n;i++)
if(v[r[i][j-1]]<v[r[i+putere[j]-1][j-1]])
r[i][j]=r[i][j-1];
else
r[i][j]=r[i+putere[j-1]][j-1];
}
int RMQ(int low,int high)
{
int l=high-low+1;
int k=log2(l);
return min(v[r[low][k]],v[r[low+l-putere[k]-1][k]]);
}
int main()
{
f>>n>>m;
for(i=0;i<n;i++)
f>>v[i];
putere[0]=1;
putere[1]=2;
for(i=2;i<=16;i++)
putere[i]=putere[i-1]*2;
BuildRmq();
for(i=1;i<=m;i++)
{
f>>x>>y;
g<<RMQ(x,y)<<'\n';
}
}