Pagini recente » Cod sursa (job #2845848) | Cod sursa (job #115080) | Cod sursa (job #2845244) | Cod sursa (job #2286350) | Cod sursa (job #2142089)
#include <bits/stdc++.h>
#define INFILE "rmq.in"
#define OUTFILE "rmq.out"
using namespace std;
ifstream in(INFILE);
ofstream out(OUTFILE);
int N,M;
int K;
const int NMAX=100000;
array<int,NMAX> vec;
array<array<int,NMAX>,NMAX> SparseTable;
void GenerateSparseTable(){
for(int i=1;i<=N;i++)
SparseTable[i][0]=vec[i];
int k=1;
while(k<=N){
k=k<<1;
K++;
}
k=k>>1;
K--;
for(int j=1;j<=K;j++){
for(int i=1;i<=N-(1<<j)+1;i++){
SparseTable[i][j]=min(SparseTable[i][j-1],SparseTable[i+(1<<j)][j-1]);
cout<<i<<" "<<j<<" "<<SparseTable[i][j]<<"\n";
}
}
}
int Querry(int x, int y){
int L=x;
int Min=INT_MAX;
for(int j=K;j>=0;j--){
if(L+(1<<j)<=y){
Min=min(SparseTable[L][j],Min);
L=(1<<j)+1;
}
}
return Min;
}
void Read(){
in>>N>>M;
for(int i=1;i<=N;i++)
in>>vec[i];
GenerateSparseTable();
}
void Determinare(){
for(int i=1;i<=M;i++){
int x,y;
in>>x>>y;
out<<Querry(x,y)<<"\n";
}
}
int main()
{
Read();
Determinare();
return 0;
}