Pagini recente » Cod sursa (job #1985827) | Cod sursa (job #3038912) | Cod sursa (job #2230336) | Cod sursa (job #716517) | Cod sursa (job #1784797)
#include<iostream>
#include<fstream>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, m, q, minim = 0x7fffffff, left1, right1, nr;
char c[1000000];
int v[100001], A[1000];
int interval()
{
minim = 0x7fffffff;
while(left1 <= right1)
{
if(left1 % nr != 0 or ((left1 + nr) > right1))
{
if(v[left1] < minim)
{
minim = v[left1];
}
++left1;
}
else
{
if(A[left1 / nr] < minim)
{
minim = A[left1 / nr];
}
left1 += nr;
}
}
return minim;
}
int main()
{
fin>>n>>m;
int l = sqrt(n),length;
int j = 0, i1;
nr = l;
if(n % l != 0)
{
l++;
}
fin.read(c,100000);
length = strlen(c);
for( i1 = 1; i1 <= length; ++i1)
{
if(c[i1] >= '0' and c[i1] <= '9')
{
v[j]*=10;
v[j] += int(c[i1]) - 48;
}
else
{
j++;
if(j>=n) break;
}
}
++i1;
for(int i = 0; i < n; ++i)
{
//fin>>v[i];
q = i / nr;
if(i % nr == 0)
{
A[q - 1] = minim;
minim = 0x7fffffff;
}
if(v[i] < minim)
{
minim = v[i];
}
}
A[q] = minim;
for(int i = 1; i <= m; ++i)
{
//fin>>left1>>right1;
left1 = 0;
right1 = 0;
while(c[i1] >= '0' and c[i1] <= '9')
{
left1 *= 10;
left1 += int(c[i1]) - 48;
++i1;
}
++i1;
while(c[i1] >= '0' and c[i1] <= '9')
{
right1 *= 10;
right1 += int(c[i1]) - 48;
++i1;
}
++i1;
--left1;
--right1;
fout<<interval()<<"\n";
}
}