Pagini recente » Cod sursa (job #2532661) | Cod sursa (job #1933047) | Cod sursa (job #2940436) | Cod sursa (job #2955962) | Cod sursa (job #1148524)
#include <iostream>
#include <fstream>
#include <math.h>
#define nMax 100001
using namespace std;
int n, m, i, j, min1, s, c, v[nMax], r[320];
int main(){
ifstream f("rmq.in");
ofstream g("rmq.out");
f>>n>>m;
min1=nMax; s=sqrt(n);
c=1;
for(int i=1;i<=n;i++){
f>>v[i];
min1=min(min1, v[i]);
if(i%s==0)
r[i/s]=min1, min1=nMax;
}
r[s+1]=min1;
/*for(int i=1;i<=s+1;i++)
g<<r[i]<<" ";
*/
int c1=0, c2=n/s+1;
for(int k=0;k<m;k++){
f>>i>>j;
//cout<<i<<" "<<j<<"\n";
c1=0, c2=n/s+1;
while(c1*s<i)c1++;
while(c2*s>j)c2--;
//cout<<c1<<" "<<c2<<"\n";
if(c1>c2)
g<<r[c1]<<"\n";
//cout<<"->"<<r[c1];
min1=v[i];
if(c1==c2){
for(;i<=j;i++)min1=min(min1, v[i]);
g<<min1<<"\n";
//cout<<"->"<<min1;
}
if(c1<c2){
min1=v[i];
for(;i<=c1*s;i++)
min1=min(min1, v[i]);
for(;j>=c2*s;j--)
min1=min(min1, v[j]);
c1++;
for(;c1<=c2;c1++)
min1=min(min1, r[c1]);
//cout<<"->"<<min1;
g<<min1<<"\n";
}
//cout<<"\n------\n";
}
return 0;
}