Pagini recente » Cod sursa (job #1860698) | Cod sursa (job #1904645) | Cod sursa (job #357894) | Cod sursa (job #2982491) | Cod sursa (job #767433)
Cod sursa(job #767433)
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
vector<int> v;
int a[100000][32];
int main()
{
FILE *f =fopen("rmq.in","r");
FILE *g =fopen("rmq.out","w+");
int n,m;
fscanf(f,"%d %d",&n,&m);
v.resize(n);
for (int i=0;i<n;i++)
{
fscanf(f,"%d",&v[i]);
}
for (int i=0;i<n;i++)
a[i][0]=v[i];
int k =0;
int h =1;
while (h<=n) {k++;h<<=1;};
int incr = 1;
for (int j=1;j<k;j++){
for (int i=n-incr-1;i>=0;i--)
{
a[i][j] = min(a[i][j-1],a[i+incr][j-1]);
}
incr<<=1;
}
for (int i=0;i<m;i++)
{
int x,y;
fscanf(f,"%d %d",&x,&y);
x--;
int kk=log((double)(y-x))/log(2.0);
int m1 = min(a[x][kk],a[y-(1<<kk)][kk]);
fprintf(g,"%d\n",m1);
}
fclose(f);
fclose(g);
}