Pagini recente » Cod sursa (job #2322791) | Borderou de evaluare (job #1036240) | Cod sursa (job #2504759) | Cod sursa (job #1454536) | Cod sursa (job #2345040)
#include <fstream>
#include <vector>
#include <cmath>
#define nmax 100002
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
vector <int> v[nmax],p;
int n,m,x,y,mini;
inline void citire ()
{
fin>>n>>m;
for (int i=1;i<=n;i++)
{
fin>>x;
v[0].push_back(x);
}
}
inline void creare ()
{
x=2;
int c=0;
while (n>=x)
{
c++;
for (int i=0;i<=n-x;i++)
{
mini=v[0][i];
for (int j=i+1;j<=i+x-1;j++)
if (v[0][j]<mini)
mini=v[0][j];
v[c].push_back(mini);
}
p.push_back(x);
x=x*2;
}
}
inline void rezolvare ()
{
int d,j=0;
for (int i=1;i<=m;i++)
{
j=0;
fin>>x>>y;
d=y-x+1;
while (d<p[j])
j++;
j++;
if (v[j][x-1]>v[j][y-p[j-1]]&&v[j][y-p[j-1]]!=0)
mini=v[j][y-p[j-1]];
else
mini=v[j][x-1];
fout<<mini<<"\n";
}
}
int main()
{
citire();
creare();
rezolvare ();
return 0;
}