Pagini recente » Cod sursa (job #107118) | Cod sursa (job #114111) | Cod sursa (job #297474) | Cod sursa (job #60015) | Cod sursa (job #3260516)
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int aint[400005];
int a, b, maxim= -1;
// stra[i][j]= al 2^j stramos al lui i
// v[a]=b
void update1(int nod, int st, int dr)
{
if (st == dr) aint[nod] = b;
else
{
int mij = (st + dr) / 2;
if (a <= mij) update1(2*nod, st, mij);
else update1(2*nod + 1, mij+ 1, dr);
aint[nod] = max(aint[2*nod], aint[2*nod + 1]);
}
}
// v[a].....v[b], maxim=-1
void query1(int nod, int st, int dr)
{
if(a<= st && dr <= b)
maxim = max(maxim, aint[nod]);
else
{
int mij = (st + dr)/2;
if(mij>=a) query1(2*nod, st, mij);
if(b>= mij + 1 ) query1(2*nod + 1, mij +1, dr);
}
}
int main()
{
int n , m;
fin >> n >> m;
for(int i = 1; i <= n; i++)
{
a=i; fin>>b;
update1(1,1,n);
}
int c;
for(int i = 1; i <= m; i++)
{
fin >> c;
fin >> a >> b;
if(c == 1)
{
update1(1 , 1 , n);
}
else
{
maxim = -1;
query1(1 , 1 , n);
fout << maxim << endl;
}
}
return 0;
}