Pagini recente » Cod sursa (job #3366469) | Cod sursa (job #3366732) | Cod sursa (job #3366016) | Cod sursa (job #3366012) | Cod sursa (job #3366447)
// rmq varianta cu aint iterativ
#include <fstream>
#include <vector>
#include <climits>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
vector<int> aint,sol;
int n,n_nou,queries;
int actualizare_n(int n)
{
while(n&(n-1)){
n+=n&-n;
} return n;
}
void set(int pos,int val)
{
pos+=n_nou; aint[pos]=val;
for(pos/=2;pos;pos/=2)
aint[pos]=min(aint[2*pos],aint[2*pos+1]);
}
int answer_query(int l,int r)
{
int mini=INT_MAX;
l+=n_nou; r+=n_nou;
while(l<=r)
{
if(l&1){
mini=min(mini,aint[l]);
l++;
}
if(!(r&1)){
mini=min(mini,aint[r]);
r--;
}
l>>=1;
r>>=1;
}
return mini;
}
int main()
{
cin>>n>>queries;
n_nou=actualizare_n(n);
aint.resize(2*n_nou,INT_MAX);
for(int i=0;i<n;i++){
int value; cin>>value; set(i,value);
}
for(int i=0;i<queries;i++){
int left,right;
cin>>left>>right;
sol.push_back(answer_query(left-1,right-1));
}
for(int x:sol) cout<<x<<'\n';
return 0;
}