Pagini recente » Cod sursa (job #2485272) | Cod sursa (job #316545) | Cod sursa (job #782195) | Cod sursa (job #2978649) | Cod sursa (job #2686169)
#include <fstream>
#include <iostream>
#include <cmath>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
int n, m, a, b, tip;
int v[100005], rezbuc[320];
int main()
{
fin>>n>>m;
int rad=sqrt(n);
for(int i=0; i<n; i++){
fin>>v[i];
if(v[i]>rezbuc[i/rad]) rezbuc[i/rad]=v[i];
}
for(int q=1; q<=m; q++)
{
fin>>tip>>a>>b;
a--; b--;
if(tip==0)
{
int Max=0;
int pozi_rezbuc=a/rad+1, pozf_rezbuc=b/rad-1;
if(a%rad==0) pozi_rezbuc--;
if((b+1)%rad==0) pozf_rezbuc++;
for(int i=pozi_rezbuc; i<=pozf_rezbuc; i++)
if(rezbuc[i]>Max) Max=rezbuc[i];
for(int i=a; i<pozi_rezbuc*rad; i++)
if(v[i]>Max) Max=v[i];
for(int i=pozf_rezbuc*rad+rad; i<=b; i++)
if(v[i]>Max) Max=v[i];
fout<<Max<<"\n";
}else
{
v[a]=b;
rezbuc[a/rad]=0;
int limst=a/rad*rad, limdr=a/rad*rad+rad;
for(int i=limst; i<limdr; i++)
if(v[i]>rezbuc[a/rad]) rezbuc[a/rad]=v[i];
}
}
return 0;
}