Pagini recente » Cod sursa (job #541461) | Cod sursa (job #2178675) | Cod sursa (job #1352894) | Cod sursa (job #2374458) | Cod sursa (job #910666)
Cod sursa(job #910666)
#include<cstdio>
#include<fstream>
using namespace std;
#define MAX 400002
int N , M , V[MAX/2] , A[MAX] , x , y , z , maxim ;
ifstream f("arbint.in");
ofstream g("arbint.out");
void citire();
void update(int n , int l , int r );
void query(int n , int l , int r);
int max(int a , int b){return a > b ? a : b ;}
int main()
{
f>>N>>M;
for(int i = 1 ; i <= N ; ++i )
{
f>>V[i];
y = i;
update(1,1,N);
}
for(int i = 1 ; i <= M ; ++i )
{
f>>x>>y>>z;
maxim = -1;
if(x == 0){
query(1,1,N);
g<<maxim<<"\n";}
else
{
V[y] = z;
update(1,1,N);
}
}
f.close();
return 0;
}
void query(int n , int l , int r)
{
if(y <=l && z >= r)maxim= max(maxim,A[n]);
else
{
int m = (l+r)/2;
if(y<=m)
query(2*n,l,m);
if(z > m)
query(2*n+1,m+1,r);
}
}
void update(int n ,int l , int r )
{
if(l==r && l==y)A[n] = V[y];
if(l == r)return;
else
{
int m = (l+r)/2;
if(y <= m)update(2*n,l,m);
if (y >m )update(2*n+1,m+1,r);
A[n] = max(A[2*n],A[2*n+1]);
}
}