Pagini recente » Cod sursa (job #390952) | Cod sursa (job #393943) | Cod sursa (job #3286082) | Cod sursa (job #1257592) | Cod sursa (job #1072829)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream in ("rmq.in");
ofstream out ("rmq.out");
void minim (int a, int b)
{
if (a<b)
out<<a<<'\n';
else
out<<b<<'\n';
}
int main()
{
int N, m;
in>>N>>m;
int v[100005];
int putere=log2(N);
int M[100005][17];
for (int i=0;i<N;++i)
{
in>>v[i];
M[i][0]=i;
}
int putere2=putere;
putere=1;
int x=2;
while (x<=N)
{
int N2=N-x;
for (int i=0;i<=N2;++i)
{
if ( v[M[i][putere-1]] < v[M[i+(x>>1)][putere-1]] )
{
M[i][putere]=M[i][putere-1];
}
else
{
M[i][putere]=M[i+(x>>1)][putere-1];
}
}
++putere;
x=x<<1;
}
/*for (int i=0;i<N;++i)
{
for (int j=0;j<=putere2;++j)
cout<<M[i][j]<<" ";
cout<<endl;
}*/
int a, b;
for (int i=0;i<m;++i)
{
in>>a>>b;
--a;
--b;
putere=log(b-a+1);
minim(v[M[a][putere]], v[M[b-(1<<putere)+1][putere]]);
}
return 0;
}