Pagini recente » Cod sursa (job #245348) | Cod sursa (job #667760) | Cod sursa (job #898027) | Cod sursa (job #2669681) | Cod sursa (job #1451595)
#include <fstream>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
int n, m, tip, a, b, val, maxim, start, finish, poz, V[3 * 100010];
void Update(int nod, int left, int right)
{
if(left==right)
{
V[nod]=val;
return;
}
int mid=(left + right)/2;
if(poz<=mid) Update(2*nod, left, mid);
else Update(2*nod+1, mid+1, right);
V[nod]=max(V[2*nod], V[2*nod+1]);
}
void Query(int nod, int left, int right)
{
if (start<=left && right<=finish)
{
maxim=max(V[nod], maxim);
return;
}
int mid=(left + right)/2;
if(start<=mid) Query(2*nod, left, mid);
if(finish>mid) Query(2*nod+1, mid+1, right);
}
int main()
{
int i;
fin >> n >> m;
for(i=1; i<=n; i++)
{
fin >> val;
poz=i;
Update(1, 1, n);
}
for(i=1; i<=m; i++)
{
fin >> tip >> a >> b;
if (!tip)
{
maxim=-1;
start=a;
finish=b;
Query(1, 1, n);
fout << maxim << '\n';
}
else
{
poz=a;
val=b;
Update(1, 1, n);
}
}
fin.close();
fout.close();
return 0;
}