Pagini recente » Cod sursa (job #1004761) | Cod sursa (job #729531) | Cod sursa (job #1098804) | Cod sursa (job #2783468) | Cod sursa (job #2972960)
#include <fstream>
using namespace std;
ifstream cin ("arbint.in");
ofstream cout ("arbint.out");
const int N=400005;
int arb[N], a, b;
void update (int poz, int val)
{
arb[poz]=val;
while (poz>1)
{
poz/=2;
arb[poz]=max(arb[poz*2], arb[poz*2+1]);
}
}
int cuerry (int s, int d, int ind)
{
if (s>=a && d<=b)
{
return arb[ind];
}
int x1=0, x2=0;
if ((d+s)/2>=a)
{
x1=cuerry(s, (d+s)/2, ind*2);
}
if ((d+s)/2+1<=b)
{
x2=cuerry((d+s)/2+1, d, ind*2+1);
}
return max(x1, x2);
}
int main()
{
int n, m, x, newn=1, p;
cin >> n >> m;
while (newn<n)
{
newn*=2;
}
/*for (int i=newn+n; i<newn*2; i++)
{
arb[i]=-1;
}*/
for (int i=1; i<=n; i++)
{
cin >> p;
///update(newn+i-1, p);
arb[newn+i-1]=p;
}
for (int i=newn-1; i>=1; i--)
{
arb[i]=max(arb[i*2], arb[i*2+1]);
}
for (int i=1; i<=m; i++)
{
cin >> x >> a >> b;
if (x==1)
{
update(newn+a-1, b);
}
else
{
cout << cuerry(1, newn, 1) << "\n";
}
}
return 0;
}