Pagini recente » Cod sursa (job #1822833) | Cod sursa (job #1605566) | Cod sursa (job #2873114) | Cod sursa (job #1134391) | Cod sursa (job #333421)
Cod sursa(job #333421)
#include <fstream>
#include <math.h>
#include <iostream>
using namespace std;
int N,M,interval,i,A[100010],Min[350],t2,a,b,ia,ib,minn;
double t;
int main () {
ifstream in;
ofstream out;
in.open("rmq.in");
out.open("rmq.out");
in >> N >> M;
interval=(int)sqrt(N);
for (i=1;i<interval+2;i++)
Min[i]=INT_MAX;
for (i=1;i<=N;i++)
{
in >> A[i];
t=(double)i/interval;
if (t>(int)t) t2=(int)t+1; else t2=(int)t;
if (Min[t2]>A[i]) Min[t2]=A[i];
}
for (int x=0; x<M; x++)
{
in >> a >> b;
t=(double)a/interval;
if (t>(int)t) t2=(int)t+1; else t2=(int)t;
ia=t2;
t=(double)b/interval;
if (t>(int)t) t2=(int)t+1; else t2=(int)t;
ib=t2;
if (ia==ib)
{
minn=INT_MAX;
for (i=a;i<=b;i++)
{
if (A[i]<minn) minn=A[i];
}
out << minn << "\n";
}
else
{
minn=INT_MAX;
for (i=ia+1;i<=ib-1;i++)
if (Min[i]<minn) minn=Min[i];
for (i=a;i<=(ia)*interval;i++)
if (A[i]<minn) minn=A[i];
for (i=(ib-1)*interval+1;i<=b;i++)
if (A[i]<minn) minn=A[i];
out << minn << "\n";
}
}
out.close();
return 0;
}