Cod sursa(job #767433)

Utilizator iris88Nagy Aliz iris88 Data 13 iulie 2012 15:19:48
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#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);

}