Pagini recente » Clasament autumn06 | Cod sursa (job #1488097) | Cod sursa (job #372649) | Cod sursa (job #2574656) | Cod sursa (job #1760229)
#include<fstream>
#include<string.h>
#include<ctype.h>
#include<iostream>
#include<algorithm>
#include<map>
#include<unordered_map>
#include<array>
#include<deque>
#include<math.h>
#include<unordered_set>
#include<set>
#include<iomanip>
#include<bitset>
using namespace std;
int n, m,rmq[100010][18],v[100100],i,minim,el,j,k,st,dr;
int findanswer(int start, int end)
{
if (end == start)
return v[start];
else
{
int p2 = log2(end - start);
return min(rmq[start][p2], findanswer(start + pow(2, p2), end));
}
}
int main()
{
ifstream f("rmq.in");
ofstream g("rmq.out");
//ifstream f("file.in");
//ofstream g("file.out");
f >> n >> m;
for (i = 1; i <= n; i++)
f >> v[i];
k = 0;
el = 1;
j = 1;
for (i = 1; i <= n; i++)
{
minim = v[i];
while (el <= n)
{
for (; j <= el&&j<=n; j++)
if (v[j] < minim)
minim = v[j];
rmq[i][k] = minim;
k++;
el = pow(2, k)+i-1;
}
k = 0;
el = 1+i;
j = i+1;
}
for (i = 1; i <= m; i++)
{
f >> st >> dr;
g << findanswer(st, dr) << '\n';
}
return 0;
}