Pagini recente » Cod sursa (job #246695) | Cod sursa (job #367931) | Cod sursa (job #2295331) | Cod sursa (job #193363) | Cod sursa (job #2732714)
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define pf push_front
#define ll long long
#define ull unsigned long long
#define x first
#define y second
#define pi pair<int,int>
#define pl pair<ll,ll>
#define EPSILON 0.000001
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const ll NMAX=4e5+5,INF=1e18,MOD=104659,MMAX=1e2+5,inf=INT_MAX;
int N,M;
int val,pos,st,dr,maxim;
int aint[NMAX];
void update(int nod,int left,int right)
{
if(left==right)
{
aint[nod]=val;
return;
}
int mid=(left+right)/2;
if(pos<=mid)update(2*nod,left,mid);
else update(2*nod+1,mid+1,right);
aint[nod]=max(aint[2*nod],aint[2*nod+1]);
}
void querry(int nod,int left,int right)
{
if(st<=left&&right<=dr)
{
maxim=max(maxim,aint[nod]);
return;
}
int mid=(left+right)/2;
if(st<=mid)querry(2*nod,left,mid);
if(mid<dr)querry(2*nod+1,mid+1,right);
}
int main()
{
fin>>N>>M;
for(int i=1;i<=N;i++)
{
fin>>val;
pos=i;
update(1,1,N);
}
for(int q=1;q<=M;q++)
{
int task,a,b;
fin>>task>>a>>b;
if(task==0)
{
maxim=-1;
st=a;
dr=b;
querry(1,1,N);
fout<<maxim<<'\n';
}
else
{
pos=a;
val=b;
update(1,1,N);
}
}
return 0;
}