Pagini recente » Cod sursa (job #2236188) | Cod sursa (job #1146591) | Cod sursa (job #1024923) | Cod sursa (job #1146120) | Cod sursa (job #1148541)
#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;
int c1=0, c2=n/s+1;
for(int k=0;k<m;k++){
f>>i>>j;
if(i==j)
{g<<v[i]<<"\n";continue;}
if(j-i<=s){
min1=v[i];
for(;i<=j;i++)min1=min(min1, v[i]);
g<<min1<<"\n";
continue;
}
c1=0, c2=n/s+1;
while(c1*s<i)c1++;
while(c2*s>j)c2--;
if(c1>c2)
{g<<r[c1]<<"\n";continue;}
min1=v[i];
if(c1==c2){
for(;i<=j;i++)min1=min(min1, v[i]);
g<<min1<<"\n";continue;
}
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]);
g<<min1<<"\n";
}
}
return 0;
}