Pagini recente » Cod sursa (job #1453409) | Cod sursa (job #329596) | Cod sursa (job #2781878) | Cod sursa (job #3283528) | Cod sursa (job #2082685)
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int v[100001];
int intervale[317];
int main()
{
int n, m;
int i, rad;
fin>>n>>m;
rad = sqrt(n);
for(i=0; i<n; i++)
{
fin>>v[i];
if(intervale[i/rad] < v[i])
intervale[i/rad] = v[i];
}
/*for(int j=0; j<=n/rad; j++)
cout<<intervale[j]<<" ";
cout<<endl<<endl;*/
int maxim;
for(i=1; i<=m; i++)
{
maxim = 0;
int op, a, b; //vectorul meu e de la 0 deci vom accesa a-1 si b-1
fin>>op>>a>>b;
if(op == 0)
{
if(a==b)
{
fout<<v[a-1]<<endl;
continue;
}
if( (b - a) < rad )
{
for(int j = a-1; j<=b-1; j++)
if(v[j] > maxim)
maxim = v[j];
fout<<maxim<<endl;
}
else
{
int j;
for(j = a-1; j < ((a-1)/rad+1)*rad; j++ )
if(v[j] > maxim)
maxim = v[j];
for(j = (a-1)/rad+1; j < b/rad; j++ ) //b-1+1 <- daca e ult elem din secventa de rad
if(intervale[j] > maxim)
maxim = intervale[j];
for(j= (b/rad)*rad; j < b; j++)
if(v[j] > maxim)
maxim = v[j];
fout<<maxim<<endl;
}
}
else
{
if(b > intervale[(a-1)/rad])
{
intervale[(a-1)/rad] = b;
v[a-1] = b;
continue;
}
//else => se schimba maximul deci trebuie actualizat
v[a-1] = b;
for(int j = ((a-1)/rad)*rad; j< ((a-1)/rad+1)*rad; j++)
if(v[j] > intervale[(a-1)/rad])
intervale[(a-1)/rad] = v[j];
}
}
}