Pagini recente » Cod sursa (job #91687) | Cod sursa (job #847707) | Cod sursa (job #627526) | Rating Andrei Ignat (Andrei_Ignat) | Cod sursa (job #791657)
Cod sursa(job #791657)
#include <iostream>
#include<fstream>
#include<math.h>
using namespace std;
int a[100010],n,m,nrint, i, b[1000];
int interog(int x, int y){
int max=a[x],k;
if (x/m +1 == y/m+1)
for (k=x; k<=y; k++) a[k]>max ? max=a[k] : max=max;
else
{for (k=x; k<(x/m +1)*m; k++ )
a[k]>max ? max=a[k] : max=max;
for (k=x/m+2; k<y/m+1; k++)
b[k]>max ? max=b[k] : max=max;
for (k=(y/m+1)*m-m; k<=y; k++ )
a[k]>max ? max=a[k] : max=max; };
return max;};
void modific(int x,int y){
a[x]=y;
int max=a[(x/m+1)*m];
for (int k=(x/m+1)*m-m; k<(x/m+1)*m; k++ )
a[k]>max ? max=a[k] : max=max;
b[x/m+1]=max;};
int main() {
ifstream f1("arbint.in");
ofstream f2("arbint.out");
f1>>n>>nrint;
for (int i=1; i<=n; i++)
f1>>a[i];
m=sqrt(n)+1;
for (i=1; i<=n; i++)
if (a[i]>b[i / m+ 1]) b[i / m+1]=a[i];
int tip,x,y;
for (i=1; i<=nrint; i++)
{ f1>>tip>>x>>y;
if (tip==0) f2<<interog(x,y)<<'\n';
if (tip==1) modific(x,y);
};
f1.close();
f2.close();
return 0;
}