Pagini recente » Cod sursa (job #2829463) | Cod sursa (job #275456) | Cod sursa (job #2916748) | Cod sursa (job #340891) | Cod sursa (job #281303)
Cod sursa(job #281303)
#include <fstream>
using namespace std;
ifstream f ("arbint.in");
ofstream g ("arbint.out");
#define NMAX 666013
#define MAX(a,b) ((a>b)?a:b)
int N, M;
int MaxArb[NMAX];
int st, fin, Val, Pos, maxx;
void Update(int root, int lo, int hi)
{
if(lo==hi)
{
MaxArb[root] = Val;
return;
}
int mid=lo+(hi-lo)/2;
if(Pos<=mid) Update(2*root,lo,mid);
else Update(2*root+1,mid+1,hi);
MaxArb[root]=MAX(MaxArb[2*root], MaxArb[2*root+1] );
}
void Query(int root, int lo, int hi)
{
if(st<=lo&&hi<=fin)
{
if(maxx<MaxArb[root])maxx=MaxArb[root];
return;
}
int mid=lo+(hi-lo)/2;
if(st<=mid) Query(2*root,lo,mid);
if(mid<fin) Query(2*root+1,mid+1,hi);
}
int main()
{
int X, A, B, i;
f>>N>>M;
for(i=1;i<=N;i++)
{
f>>X;
Pos = i, Val = X;
Update(1,1,N);
}
for(i=1;i<=M;i++)
{
f>>X>>A>>B;
if(!X)
{
maxx = -1;
st= A;
fin=B;
Query(1,1,N);
g<<maxx<<"\n";
}
else
{
Pos=A;
Val=B;
Update(1,1,N);
}
}
}