Cod sursa(job #694592)

Utilizator bacilaBacila Emilian bacila Data 27 februarie 2012 22:01:36
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>
using namespace std;
ofstream g("arbint.out");
int a[400005],x,y,z,n,m,ma;
void update(int nod, int st, int dr)
{if(st==dr) a[nod]=z;
else
{if(y<=(st+dr)/2) update(2*nod,st,(st+dr)/2);
else
update(2*nod+1,(st+dr)/2+1,dr);
a[nod]=max(a[2*nod],a[2*nod+1]);
}
}
void query(int nod, int st, int dr)
{ 
     if(y<=st&&dr<=z){ if(ma<a[nod]) ma=a[nod];} 
     else
     {if(y<=(st+dr)/2) query(nod*2,st,(st+dr)/2);
     if(z>(st+dr)/2) query(nod*2+1,(st+dr)/2+1,dr);
     }
     
     
     }
int main ()
{ifstream f("arbint.in");
 
f>>n>>m;
for(y=1;y<=n;y++)
{f>>z; update(1,1,n);}

while(m)
{f>>x>>y>>z;
if(!x)
{ma=0;

query(1,1,n); 
g<<ma<<'\n';}
else
update(1,1,n);
m--;}
 f.close(); g.close();
return 0;
}