Pagini recente » Cod sursa (job #2913620) | Cod sursa (job #1401417) | Cod sursa (job #48396) | Cod sursa (job #1259015) | Cod sursa (job #2989736)
#include <iostream>
#include <fstream>
#include <math.h>
#define NMAX 1000
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, m, v[NMAX], sq, batog_size, batog[400], interval;
void build_batog(){
for(int i=0;i<n;i++){
int j=i/sq;
batog[j]=std::max(batog[j], v[i]);
}
}
int query(int left, int right){
int firstInterval = (left + sq - 1) / sq * sq;
int lastInterval = right / sq * sq;
int el_max=0;
cout<<firstInterval<<" "<<lastInterval<<"\n";
while(left<right&&left<firstInterval)
el_max=std::max(el_max, v[left++]);
while(right>=left&&right>=lastInterval)
el_max=std::max(el_max, v[right--]);
firstInterval/=sq;
lastInterval/=sq;
while(firstInterval<=lastInterval)
el_max=std::max(el_max, batog[firstInterval++]);
return el_max;
}
int main()
{
fin>>n>>m;
sq=sqrt(n);
batog_size=(n+sq-1)/sq;
for(int i=0;i<n;i++){
fin>>v[i];
}
build_batog();
int operatie, e1, e2;
for(int i=0;i<m;i++){
fin>>operatie>>e1>>e2;
e1--;
if(!operatie){
e2--;
fout<<query(e1, e2)<<"\n";
}
else{
v[e1]=e2;
interval=e1/sq;
int left=interval*sq;
int right=(interval+1)*sq-1;
batog[interval]=0;
while(left<=right)
batog[interval]=std::max(batog[interval], v[left++]);
}
}
return 0;
}