Pagini recente » Cod sursa (job #1094783) | Cod sursa (job #1371549) | Borderou de evaluare (job #1268045) | Cod sursa (job #2389667) | Cod sursa (job #2617235)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int mat[100005][100];
int main()
{
int n,m;
vector<int> v;
fin>>n>>m;
for(unsigned i=0; i<n; i++)
{
mat[i][0]=i;
int x;
fin>>x;
v.push_back(x);
}
for(unsigned i=1; (1<<i)<=n; i++)
for(unsigned j=0; (j+(1<<i)-1) < n; j++)
if(v[mat[j][i-1]]<v[mat[j+(1<<(i-1))][i-1]])
mat[j][i]=mat[j][i-1];
else
mat[j][i]=mat[j+(1<<(i-1))][i-1];
for(unsigned i=0; i<m; i++)
{
int x,y;
fin>>x>>y;
x--;
y--;
int k= (int)log2(y-x+1);
if(v[mat[x][k]]<v[mat[y-(1<<k)+1][k]])
fout<<v[mat[x][k]]<<"\n";
else fout<<v[mat[y-(1<<k)+1][k]]<<"\n";
}
return 0;
}