Pagini recente » Cod sursa (job #566886) | Cod sursa (job #989243) | Cod sursa (job #3002224) | Cod sursa (job #1977619) | Cod sursa (job #1142827)
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,i,x[500005],poz,uj,k,maxi,a,b,muvelet;
int maximum(int a,int b)
{
if(a>b)return a;
else return b;
}
int update(int csp, int left, int right)
{
if(left==right)
{
x[csp]=uj;
return 0;
}
int k=(left+right)/2;
if(poz<=k)update(2*csp,left,k);
else update(2*csp+1,k+1,right);
x[csp] = maximum(x[2*csp],x[2*csp+1]);
}
int query(int csp,int left,int right)
{
if(a<=left && right<=b)
{
if(maxi<x[csp])maxi=x[csp];
return 0;
}
int k=(left+right)/2;
if(a<=k)query(2*csp, left, k);
if(k<b)query(2*csp+1, k+1, right);
}
int main()
{
f>>n>>m;
for (i=1;i<=n;i++)
{
f>>uj;
poz=i;
update(1,1,n);
}
for (i=1;i<=m;i++)
{
f>>muvelet>>a>>b;
if(muvelet==1)
{
poz=a;
uj=b;
update(1,1,n);
}
else
{
maxi=-1;
query(1,1,n);
g<<maxi<<"\n";
}
}
}