Pagini recente » Cod sursa (job #2637895) | Cod sursa (job #2469518) | Cod sursa (job #1964633) | Cod sursa (job #1463582) | Cod sursa (job #2856386)
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int sparseTable[20][100005];
int getAnswer(int st,int dr){
int len = dr - st;
int maxPw = 0;
while(1 << maxPw <= len)
++maxPw;
--maxPw;
int firstMin = sparseTable[maxPw][st];
int secondMin = sparseTable[maxPw][dr - (1 << maxPw) + 1];
if(st != dr)
return min(firstMin,secondMin);
else
return sparseTable[0][st];
}
int main()
{
int n,queries;
fin>>n>>queries;
for(int i = 0 ; i < n; i++)
fin>>sparseTable[0][i];
int maxPower = 0;
while( (1 << maxPower) <= n)
{
++maxPower;
}
--maxPower;
//now you know the maxPower
for(int i = 1; i <= maxPower; i++)
{
for(int j = 0;j <= n - (1 << i); j++)
sparseTable[i][j] = min(sparseTable[i - 1][j], sparseTable[i - 1][j + (1 << (i - 1)) ]);
}
// for(int i = 0 ; i <= maxPower; i++)
// {
// for(int j = 0 ; j < n ; j++)
// cout<<sparseTable[i][j]<<" ";
// cout<<'\n';
// }
for(int i = 0; i < queries; i++)
{
int st,dr;
fin>>st>>dr;
--st,--dr;
fout<<getAnswer(st,dr)<<'\n';
}
return 0;
}