Pagini recente » Cod sursa (job #409678) | Cod sursa (job #1984858) | Cod sursa (job #1866183) | Cod sursa (job #2889258) | Cod sursa (job #2167058)
#include <fstream>
#define N 300003
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int heap[N];
int n,m,x;
int poz,val;
bool p; int a,b;
inline void Add(const int &i,const int &st, const int &dr)
{
if(st == dr)
{
heap[i] = val;
}
else{
int mid = st + (dr-st)/2;
if(poz <= mid)
Add(2*i, st, mid);
else
Add(2*i + 1, mid+1, dr);
heap[i] = max(heap[2*i],heap[2*i+1]);
}
}
inline int Max(const int &i, const int &st, const int &dr)
{
if(a <= st && b >= dr) return heap[i];
int sol = 0;
int mid = st + (dr-st)/2;
if(a <= mid)
sol = Max(2*i,st,mid);
if(b > mid)
sol = max(sol, Max(2*i+1,mid+1,dr));
return sol;
}
inline void AfisHeap(int i,int st,int dr)
{
if(st == dr) return;
int mid = st + (dr-st)/2;
fout<<"["<<st<<" , "<<dr<<"]"<< heap[i]<<"\n";
AfisHeap(2*i,st,mid);
AfisHeap(2*i+1,mid+1,dr);
}
int main()
{
fin>>n>>m;
for(poz = 1; poz <= n; ++poz)
{
fin>>val;
Add(1,1,n);
}
//AfisHeap(1,1,n);
while(m--)
{
fin>>p>>a>>b;
if(p == 0)
fout<<Max(1,1,n)<<"\n";
else
{
poz = a;
val = b;
Add(1,1,n);
}
}
fin.close(); fout.close();
return 0;
}