Pagini recente » Cod sursa (job #2982165) | Cod sursa (job #2958780) | Cod sursa (job #3159401) | Cod sursa (job #3134409) | Cod sursa (job #1053573)
#include <fstream>
#define nmax 100001
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int arb[5*nmax],n,rez,a,b;
int maxim(int x,int y)
{
if(x>y) return x;
else return y;
}
void change(int s, int d, int c) // stanga, dreapta, numar nod curent
{
if(s==d) { arb[c]=b; return; } //b-valoarea noua
int m=(s+d)/2;
if(a<=m) change(s,m,2*c); // a-pozitia
else change(m+1,d,2*c+1);
arb[c]=maxim(arb[2*c],arb[2*c+1]);
}
void query(int s, int d, int c) //[a,b] intervalul dorit, [s,d] intervalul curent c
{
if( a<=s && d<=b )
{
if(arb[c]>rez) rez=arb[c];
return;
}
int m=(s+d)/2;
if(a<=m) query(s,m,2*c);
if(b>m) query(m+1,d,2*c+1);
}
int main()
{
int m,i,x;
f>>n>>m;
for(i=1;i<=n;i++)
{
f>>x; a=i; b=x;
change(1,n,1);
}
for(i=1;i<=m;i++)
{
f>>x; f>>a>>b;
if(!x)
{
rez=-1;
query(1,n,1);
g<<rez<<'\n';
}
else change(1,n,1);
}
}