Pagini recente » Cod sursa (job #165786) | Cod sursa (job #2394145) | Cod sursa (job #606412) | Cod sursa (job #1332493) | Cod sursa (job #2787044)
#include <fstream>
#define inf 9999999
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int* const_vct_minim(int n,int radical,int* v)
{
int i,j,Min;
int* vct_min=(int*)malloc(sizeof(int)*(radical+5));
for(i=0;i*radical<n;i++)
{
Min=inf;
for(j=i*radical;j<(i+1)*radical&&j<n;j++)
if(v[j]<Min)
Min=v[j];
vct_min[i]=Min;
}
return vct_min;
}
int raspunde(int radical,int* v,int* vct_min,int stanga, int dreapta)
{
int i,Min=inf;
int poz_stanga=stanga/radical+1;
int poz_dreapta=dreapta/radical;
for(i=stanga;i<poz_stanga*radical&&i<=dreapta;i++)
if(v[i]<Min)
Min=v[i];
for(i=dreapta;i>=poz_dreapta*radical&&i>=stanga;i--)
if(v[i]<Min)
Min=v[i];
for(i=poz_stanga;i<poz_dreapta;i++)
if(vct_min[i]<Min)
Min=vct_min[i];
return Min;
}
int main()
{
int i,nr_operatii,n,radical=0,t,a,b;
f>>n>>nr_operatii;
int* v=(int*)malloc(sizeof(int)*(n+5));
for(i=0;i<n;i++)
f>>v[i];
while(radical*radical<n)
radical++;
int* vct_min=const_vct_minim(n,radical,v);
for(i=0;i<nr_operatii;i++)
{
f>>a>>b;
g<<raspunde(radical,v,vct_min,a-1,b-1)<<'\n';
}
free(v);
free(vct_min);
return 0;
}