Pagini recente » Cod sursa (job #1598613) | Cod sursa (job #2765281) | Cod sursa (job #3288656) | Cod sursa (job #2325857) | Cod sursa (job #2102619)
#include <fstream>
#include <math.h>
#include <vector>
#include <iostream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
#define INT unsigned int
long N,K;
vector< vector<int> > buff(20);
void rmq(vector<int> &v)
{
buff[0]=v;
for(INT i=0;i<buff.size();i++) buff[i].resize(v.size());
for(INT i=1,step=1;i<20;i++,step*=2)
for(INT j=0,k=step;k<buff[i].size();k++,j++)
buff[i][j] = min(buff[i-1][j], buff[i-1][k]);
}
int query(int st,int dr)
{
const int niv=log2(dr-st+1);
return min(buff[niv][st],buff[niv][dr- (1<<niv) +1]);
}
int main()
{
f>>N>>K;
vector<int> V(N);
for(int i=0;i<N;i++) f>>V[i];
rmq(V);
for(int i=0,st,dr;i<K;i++)
{
f>>st>>dr;
g<<query(st-1,dr-1)<<'\n';
}
return 0;
}