Pagini recente » Cod sursa (job #1601857) | Cod sursa (job #2879080) | Cod sursa (job #1848804) | Cod sursa (job #240052) | Cod sursa (job #1359894)
#include <fstream>
const int NMAX = 100005;
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int N,Q,pos,value,answer,type,a,b;
int MaxArb[NMAX<<2];
int maxim(int a, int b)
{
if (a > b)
return a;
return b;
}
void Update(int nod, int left, int right)
{
if (left == right)
{
MaxArb[nod] = value;
return;
}
int mid = (left+right) / 2;
if (pos > mid)
Update(2*nod+1,mid+1,right);
else Update(2*nod,left,mid);
MaxArb[nod] = maxim(MaxArb[2*nod],MaxArb[2*nod+1]);
}
void Query(int nod, int left, int right)
{
if (a <= left && right <= b)
{
if (MaxArb[nod] > answer)
answer = MaxArb[nod];
return;
}
int mid = (left+right) / 2;
if (a <= mid)
Query(nod*2,left,mid);
if (b > mid)
Query(nod*2+1,mid+1,right);
}
int main()
{
f >> N >> Q;
for (int i = 1; i <= N; ++i)
{
f >> value;
pos = i;
Update(1,1,N);
}
while(Q--)
{
f >> type;
if (type == 0)
{
f >> a >> b;
answer = 0;
Query(1,1,N);
g << answer << '\n';
}
else
{
f >> pos >> value;
Update(1,1,N);
}
}
f.close();
g.close();
return 0;
}