Pagini recente » Cod sursa (job #1418802) | Cod sursa (job #1140322) | Cod sursa (job #698465) | Cod sursa (job #1383131) | Cod sursa (job #597285)
Cod sursa(job #597285)
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int N = 1 + (1<<18);
const int INF = 1000000000;
int a,b,n,t[N];
inline int max(int a, int b)
{
return a>b ? a : b;
}
void modifica(int p, int st, int dr, int val)
{
if(a<=st && dr<=b)//daca intervalul curent e inclus in cel pe care-l modific
{
t[p] = val;
return;
}
int mij = (st + dr) >> 1;
if(a <= mij)
modifica(p<<1, st, mij, val);
if(b > mij)
modifica((p<<1)+1, mij+1, dr, val);
t[p] = max(t[p<<1], t[(p<<1)+1]);
}
int maxim(int p, int st, int dr)
{
if(a<=st && dr<=b)
return t[p];
int r1 = -INF, r2 = -INF, mij = (st + dr) >> 1;
if(a <= mij)
r1 = maxim(p<<1, st, mij);
if(b > mij)
r2 = maxim((p<<1)+1, mij+1, dr);
return max(r1, r2);
}
int main()
{
int m,i,tip,x;
in>>n>>m;
for(i=1 ; i <=n ; i++)
{
in>>x;
a = b = i;
modifica(1,1,n,x);
}
while(m--)
{
in>>tip>>a>>b;
if(tip == 0)
out<<maxim(1,1,n)<<"\n";
else
{
x = b;
b = a;
modifica(1,1,n,x);
}
}
in.close();
out.close();
return 0;
}