Pagini recente » Cod sursa (job #2277574) | Cod sursa (job #2759631) | Cod sursa (job #1424805) | Cod sursa (job #1441687) | Cod sursa (job #3131108)
#include<fstream>
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
void preprocesare(vector<vector<int>>& dp ,int n,int j){
int putere=1<<(j);
if(putere<n){
for(int i=0;i<n;i++){
if(i+putere<n){
dp[i][j]=min(dp[i][j-1],dp[i+putere-1][j-1]);
}
else{
dp[i][j]=min(dp[i][j-1],dp[n-1][j-1]);
}
preprocesare(dp,n,j+1);
}
}
}
int main(){
int arr[100000];
vector<vector<int>> dp;
int i=0;
int n,m,temp;
in>>n>>m;
for(int i=0;i<n;i++){
in>>temp;
dp.push_back(vector<int>{temp});
dp[i].insert(dp[i].begin()+1,17,0);
}
preprocesare(dp,n,1);
int x,y;
for(int i=0;i<m;i++){
in>>x>>y;
int p=31-__builtin_clz(y-x+1);
out<<min(dp[x-1][p],dp[y-(1<<p)][p])<<'\n';
}
}