Cod sursa(job #1351021)

Utilizator code_and_rosesUPB Dinu Neatu Rotaru code_and_roses Data 21 februarie 2015 09:13:53
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.44 kb
// MAXori intervale - O(logN) pe operatie

#include <fstream>
#define NMAX 100099
#define oo 2000000000
using namespace std;
ifstream f("MAXint.in");
ofstream g("MAXint.out");
int N,M,v[Nmax],MAX[4*NMAX], MIN[4*NMAX]sol,A,B,x,y,val,op;

void Update(int node, int st, int dr)
{
     if (A <= st && dr <= B)
     {
          MAX[node] = MIN[node] = val;
          return;
     }
     int mij = (st + dr) >> 1, left = node << 1, right=left + 1;
     if (A <= mij) Update(left, st, mij);
              else Update(right, mij + 1, dr);
     if (MAX[s1] > MAX[s2])MAX[node] = MAX[left];
                     else  MAX[node] = MAX[right];

     if (MIN[s1] < MIN[s2])MAX[node] = MAX[left];
                     else  MAX[node] = MAX[right];
}

void Query(int node, int st, int dr)
{
     if(A <= st && dr <= B)
     {
          if (sol < MAX[node]) sol = MAX[node];
          if (sol > MIN[node]) sol = MIN[node];
          return;
     }
     int mij = (st + dr) >> 1, left = node << 1, right=left + 1;
     if (A <= mij) Query(left, st, mij);
     if (mij < B)  Query(right, mij + 1, dr);
}

int main()
{
     f>> N >> M;
     for(int i=1;i<=N;++i)
          f >> val , A = B = i , Update(1, 1, N);
     for(int i=1;i<=M;++i)
     {
          f>>op>>x>>y;
          if(op == 1) A = B = x , val = y , Update(1, 1, N);
          else A=x , B=y, sol=0, Query(1,1,N) ,g<<sol<<'\n';
     }
     f.close();g.close();
     return 0;
}