Pagini recente » Cod sursa (job #907506) | Cod sursa (job #1630547) | Cod sursa (job #1964137) | Cod sursa (job #1364018) | Cod sursa (job #2469686)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
vector <int >v[50];
void creare_query(int n, int j ,int doi_i)
{
int i;
if(doi_i*2>n)
return ;
for(i=0;i< n-doi_i*2+1;i++)
{
int minim=min( v[j-1][i] , v[j-1][i+doi_i] ) ;
v[j].push_back( minim );
}
creare_query(n, j+1 ,doi_i *2);
}
int inteogare_query(int a,int b)
{
int lungime = b - a + 1 ,lungime_ramasa, minim;
int i=1,ct=0;
while(i<lungime)
i=i*2, ct++;
if(i!=lungime)
ct--;
else
return v[ct][a];
lungime_ramasa= lungime -i/2;
minim =min( v[ct][a] ,v[ct][a+lungime_ramasa] );
return minim;
}
int main()
{
int n,m,i,j,x,a,b;
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>x;
v[0].push_back(x);
}
creare_query(n,1,1);
for(i=1;i<=m;i++)
{
fin>>a>>b;
fout<<inteogare_query(a-1,b-1)<<"\n";
}
return 0;
}