Pagini recente » Cod sursa (job #1134860) | Cod sursa (job #1620461) | Cod sursa (job #57914) | Cod sursa (job #3215629) | Cod sursa (job #3133847)
#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&&putere>0){
for(int i=0;i<n;i++){
if((i+(1<<(j-1)))<n){
dp[j][i]=min(dp[j-1][i],dp[j-1][i+(1<<(j-1))]);
}
// else{
// int index=n-1-(1<<(j-1));
// dp[j][i]=min(dp[j-1][i],dp[j-1][n-1-(1<<(j-1))]);
// }
}
preprocesare(dp,n,j+1);
}
}
int main(){
vector<vector<int>> dp;
dp.push_back(vector<int>());
int n,m,temp;
in>>n>>m;
for(int i=0;i<n;i++){
in>>temp;
dp[0].push_back(temp);
}
dp.insert(dp.begin()+1,17,vector<int>(dp[0].size(),0));
preprocesare(dp,n,1);
for(auto &i:dp){
for( auto j:i){
cout<<j<<' ';
}
cout<<'\n';
}
int x,y;
for(int i=0;i<m;i++){
in>>x>>y;
int p=31-__builtin_clz(y-x+1);
out<<min(dp[p][x-1],dp[p][y-(1<<p)])<<'\n';
}
}