Pagini recente » Cod sursa (job #2528409) | Cod sursa (job #2661683) | Cod sursa (job #1490188) | Cod sursa (job #2690390) | Cod sursa (job #2512099)
#include <iostream>
#include <fstream>
#include <vector>
#include <math.h>
using namespace std;
ifstream in ("rmq.in");
ofstream out("rmq.out");
//int mm[10000][1000];
vector <int> a;
vector < vector <int> > mm;
vector <int> dummy;
int n, m;
int x1, x2;
void preproc()
{
dummy.resize((int)(log2(n+1)+1), 0);
mm.resize(n+2, dummy);
for(int i=0; i<n; i++)
mm[i][0]=a[i];
for(int put=1; (1<<put)<=n; put++)
{
for(int i=0; i+(1<<put)-1<n; i++)
{
mm[i][put]=min(mm[i][put-1], mm[i+(1<<(put-1))][put-1]);
}
}
}
int rmq(int x1, int x2)
{
int poz=(int)log2(x2-x1+1);
return min(mm[x1][poz], mm[x2-(1<<poz)+1][poz]);
}
int main()
{
in>>n>>m;
a.resize(n+1);
for(int i=0; i<n; i++)
in>>a[i];
preproc();
for(int i=1; i<=m; i++)
{
in>>x1>>x2;
out<<rmq(x1-1, x2-1)<<"\n";
}
return 0;
}