Pagini recente » Cod sursa (job #1708350) | Cod sursa (job #1046772) | Cod sursa (job #2328183) | Cod sursa (job #1691430) | Cod sursa (job #2785591)
#include <fstream>
#define inf 99999999
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int* const_vct_minim(int n,int radical,int* v)
{
int i,j,Min;
int* vct_min=(int*)malloc(sizeof(int)*radical);
for(i=0;i*radical<n;i++)
{
Min=-1;
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 modifica(int n,int radical,int* v,int* vct_min,int poz,int val)
{
int i,Min=-1;
int index=poz/radical;
v[poz]=val;
for(i=index*radical;i<(index+1)*radical&&i<n;i++)
if(v[i]>Min)
Min=v[i];
vct_min[index]=Min;
}
int raspunde(int radical,int* v,int* vct_min,int stanga, int dreapta)
{
int i,Min=-1;
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);
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>>t>>a>>b;
if(t)
modifica(n,radical,v,vct_min,a-1,b);
else
g<<raspunde(radical,v,vct_min,a-1,b-1)<<'\n';
}
free(v);
free(vct_min);
return 0;
}