Pagini recente » Cod sursa (job #2187719) | Cod sursa (job #1214467) | Cod sursa (job #473982) | Cod sursa (job #116882) | Cod sursa (job #562609)
Cod sursa(job #562609)
#include<fstream>
#define MAX 100001
using namespace std;
int N,M,ARB[4*MAX+66],l,r,val;
int maxim(int a,int b)
{
if(a>=b)return a;
return b;
}
void update(int nod,int left,int right)
{
if(l<=left && right<=r)
ARB[nod] = val;
if(left >= right)return;
int mid = left+(right-left)/2;
if(l<=mid)
update(2*nod,left,mid);
if(r>mid)
update(2*nod+1,mid+1,right);
ARB[nod] = maxim(ARB[2*nod], ARB[2*nod+1]);
}
int querry(int nod,int left,int right)
{
if(l<=left && right<=r)
return ARB[nod];
if(left>=right)return 0;
int mid = left+(right-left)/2;
int a = 0,b = 0;
if(l<=mid)
a = querry(2*nod, left, mid);
if(r>mid)
b = querry(2*nod+1, mid+1,right);
return maxim(a,b);
}
int main()
{
ifstream f("arbint.in");
f>>N>>M;
int i,x,y,c;
for(i=1;i<=N;++i)
{
f>>x;
l = r = i;
val = x;
update(1,1,N);
}
ofstream g("arbint.out");
for(;M;--M)
{
f>>c>>x>>y;
if(c == 0)
{
l = x;
r = y;
g<<querry(1,1,N)<<"\n";
}
else
{
l = r = x;
val = y;
update(1,1,N);
}
}
g.close();
return 0;
}