Cod sursa(job #1193600)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 1 iunie 2014 01:39:03
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <cstdio>
#define nmax 100005
#include <algorithm>
using namespace std;
FILE *f=fopen("arbint.in","r");
FILE *g=fopen("arbint.out","w");
int n,m,adi[265000],x,a,b,maxim;

void update(int st,int dr,int nod)
{if (st==a&&a==dr) {adi[nod]=b;}
              else {int mij=(st+dr)>>1;
                    if (a<=mij) update(st,mij,nod*2);
                    if (mij+1<=a) update(mij+1,dr,nod*2+1);
                    adi[nod]=max(adi[nod*2],adi[nod*2+1]);
                    }
}
void query(int st,int dr,int nod)
{if (a<=st&&dr<=b) maxim=max(maxim,adi[nod]);
    else {int mij=(st+dr)>>1;
          if (a<=mij) query(st,mij,nod*2);
          if (mij+1<=b) query(mij+1,dr,nod*2+1);
          }
}



int main()
{int i,j;
fscanf(f,"%d %d",&n,&m);
for (i=1;i<=n;i++)
        {a=i;
         fscanf(f,"%d",&b);
         update(1,n,1);}

for (i=1;i<=m;i++)
        {fscanf(f,"%d %d %d",&x,&a,&b);
         if (x==1) {update(1,n,1);
                    }
              else {maxim=0;
                    query(1,n,1);
                    fprintf(g,"%d\n",maxim);
                    }
         }






return 0;
}