Pagini recente » Cod sursa (job #875330) | Cod sursa (job #2922542) | Cod sursa (job #2228450) | Cod sursa (job #415457) | Cod sursa (job #2904715)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int a[100005], n, m, operatie, i, j, st, dr, dim, st2, dr2, maxim[350];
int f1(int p)
{
if(p % dim == 0)
return p/dim;
return p/dim+1;
}
void modif(int p, int v)
{
a[p] = v;
int nr = f1(p), i;
maxim[nr] = 0;
i = (nr-1)*dim+1;
while(i <= nr*dim)
{
maxim[nr]=max(maxim[nr],a[i]);
i++;
}
}
int f2(int st, int dr)
{
int nr1 = f1(st);
int nr2 = f1(dr);
int x = 0;
if(nr1 == nr2)
{
int i;
for(i = st; i <= dr; i++)
x = max(x, a[i]);
}
else
{
int i;
for(i = nr1 + 1; i < nr2; i++)
x = max(x, maxim[i]);
for(i = st;i <= nr1 * dim; i++)
x = max(x, a[i]);
for(i=(nr2-1)*dim+1;i<=dr; i++)
x = max(x, a[i]);
}
return x;
}
int main()
{
f>>n>>m;
dim = sqrt(n);
for(i=1;i<=n;i++)
{
f>>a[i];
maxim[f1(i)] = max(maxim[f1(i)], a[i]);
}
while(m--)
{
f>>operatie>>st>>dr;
if(!operatie)
g<<f2(st, dr)<<endl;
else modif(st, dr);
}
return 0;
}