Pagini recente » Cod sursa (job #1361190) | Cod sursa (job #2360492) | Cod sursa (job #1351137) | Cod sursa (job #2365304) | Cod sursa (job #2613722)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("rmq.in");
ofstream g ("rmq.out");
int m[100005][20];
int v[100005];
int n,q;
int main()
{
f>>n>>q;
for(int i=0; i<n; i++)
{
f>>v[i];
m[0][i]=i;
}
int j=1;
int log=log2(n);
while(j<=log)
{
memset(m[j], -1, sizeof(m[j]));
for(int i=0; i<n-j; i++)
{
if(v[m[j-1][i]]<v[m[j-1][i+(1<<(j-1))]])
m[j][i]=m[j-1][i];
else
m[j][i]=m[j-1][i+(1<<(j-1))];
}
j++;
}
for(int i=0; i<q; i++)
{
int x, y;
f>>x>>y;
int l=log2(x-y+1);
if(m[l][x-1]!=-1 && m[l][y-(1<<log)]!=-1)
g<<min(v[m[l][x-1]], v[m[l][y-(1<<l)]])<<"\n";
else if(m[l][x-1]!=-1)
g<<v[m[l][x-1]]<<"\n";
else
g<<v[m[l][y-(1<<l)]]<<"\n";
}
return 0;
}