Pagini recente » Cod sursa (job #1622976) | Cod sursa (job #1931483) | Cod sursa (job #1533239) | Cod sursa (job #2934448) | Cod sursa (job #1532947)
#include <fstream>
#include <vector>
#define Nmax 100000
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
vector <int> A;//daca foloseam int A[4*dimensiunea], explicatia e ca diferenta la puteri e mai mare
int v,M,N,a,b,x,e,l;
int query(int nod, int st, int dr)
{
if(a<=st&&b>=dr)
return A[nod];
else
{
int mij=0;
int t1=-1,t2=-1;
mij=(st+dr)/2;
if(a<=mij)
t1=query(2*nod,st,mij);
if(b>mij)
t2=query(2*nod+1,mij+1,dr);
if(t1>=t2)
return t1;
return t2;
}
}
void update(int nod,int st,int dr)
{
if(a<=st && b>=dr)//st=dr=e;
{
A[nod]=l;//valoarea de pe poz A[nod] ia valoarea l
return;
}
else
{
int mij=0;
mij=(st+dr)/2;
if(a<=mij)
update(2*nod,st,mij);
if(b>mij)
update(2*nod+1,mij+1,dr);
A[nod]=max(A[2*nod],A[2*nod+1]);
}
}
int main()
{
int i;
f>>N>>M;
for(i=0;i<=2*N;i++)
A.push_back(0);
for(i=1; i<=N; i++)
{
f>>v;
a=i;
b=i;
l=v;
update(1,1,N);
/* for( int j=1;j<=2*N;j++)
g<<A[j]<<' '; g<<v<<' '<<endl;
*/
}
/*for(i=1;i<=2*N;i++)
g<<A[i]<<' ';*/
for(i=1; i<=M; i++)
{
f>>x>>e>>l;
if(!x)
{
a=e;
b=l;
g<<query(1,1,N);
g<<'\n';
}
else
{
a=e;
b=e;//intervalul se modifica cu o singura valoare
update(1,1,N);
}
}
f.close();
g.close();
return 0;
}