Cod sursa(job #2052134)

Utilizator AnduRazvanMindrescu Andu AnduRazvan Data 30 octombrie 2017 01:55:33
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
#include <cmath>
#include <algorithm>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n,m,a[100001],z,x,y,b[1000],rad,maxi;
int main()
{ fin>>n>>m;int i,j;
  for(i=0;i<n;i++)
    fin>>a[i];
    rad=int(sqrt(n));
  for(i=0;i<=n;i++)
    if(a[i]>b[i/rad]) b[i/rad]=a[i];
   for(i=1;i<=m;i++)
    {fin>>x>>y>>z;
    if(x==1) {y--;
              a[y]=z;b[y/rad]=0;
              //if(a[y]>b[y/rad]) b[y/rad]=a[y];
              for(j=y/rad*rad;j<=y/rad*rad+rad-1;j++)
               if(a[j]>b[y/rad]) b[y/rad]=a[j];
             }
    else
      { y--;
        z--;
        maxi=0;
        for(j=y/rad+1;j<=z/rad-1;j++)
        if(b[j]>maxi) maxi=b[j];

        for(j=y;j/rad==y/rad;j++)
         if(a[j]>maxi) maxi=a[j];

         for(j=z;j/rad==z/rad;j--)
          if(a[j]>maxi) maxi=a[j];
       fout<<maxi<<"\n";
      }
    }
    return 0;
}