Pagini recente » Cod sursa (job #3254616) | Cod sursa (job #2346161) | Cod sursa (job #375669) | Cod sursa (job #2516848) | Cod sursa (job #2469927)
#include <iostream>
#include <fstream>
#include <cmath>
#define MAXN 1000001
#define MAXM 1001
#define MAXEL 100001
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int a[MAXN],m[MAXM],sqn;
int rmq(int x,int y){
int st,fn,minval=MAXEL;
if(x%sqn!=0){
minval=a[x];
x++;
for(;x%sqn!=0 and x<=y;x++)
if(minval>a[x])
minval=a[x];
}
if(y%sqn!=sqn-1){
for(;y%sqn!=sqn-1 and y>=x;y--)
if(minval>a[y])
minval=a[y];
}
if(x>y)
return minval;
for(int i=x/sqn;i<=y/sqn;i++){
if(minval>a[m[i]])
minval=a[m[i]];
}
return minval;
}
int main(){
int n,nrq,nrm=-1;
fin>>n>>nrq;
sqn=sqrt(n);
for(int i=0,contsqr=1,minval,pozmin;i<n;i++,contsqr++){
fin>>a[i];
if(contsqr>sqn){
contsqr=1;
nrm++;
m[nrm]=pozmin;
pozmin=i;
minval=a[i];
}
else if(minval>a[i] or i==0){
minval=a[i];
pozmin=i;
}
if(i==n-1){
nrm++;
m[nrm]=pozmin;
}
}
for(int i=1;i<=nrq;i++){
int x,y;
fin>>x>>y;
fout<<rmq(x-1,y-1)<<'\n';
}
return 0;
}