Pagini recente » Cod sursa (job #216477) | Cod sursa (job #329457) | Cod sursa (job #584267) | Cod sursa (job #571699) | Cod sursa (job #2998585)
#include <iostream>
#include <fstream>
using namespace std;
int n,m,x,v[256], p = 1;
void update(int poz,int x)
{
poz=poz+p-1;
v[poz]=x;
while (poz!=1)
{
poz/=2;
v[poz]=max(v[poz*2],v[poz*2+1]);
}
}
int maxim(int a,int b,int st,int dr,int index)
{
if (a<=st && b>=dr) return v[index];
if (dr<a || st>b) return 0;
return max(maxim(a,b,st,(st+dr)/2,index*2),maxim(a,b,(st+dr)/2+1,dr,index*2+1));
}
int main()
{
ifstream f ("arbint.in");
ofstream g ("arbint.out");
f>>n>>m;
int a,b,c;
while (p<n) p*=2;
for (int i=1; i<=n; i++)
{
f>>x;
update(i,x);
}
n=p;
for (int i=1;i<=m;i++)
{
f>>c>>a>>b;
if (c==0)
g<<maxim(a,b,1,n,1)<<'\n';
else
update(a,b);
}
}