线段树模板2

来源:互联网 发布:mac webstorm使用 编辑:程序博客网 时间:2024/05/20 05:56
#include <iostream>using namespace std;struct Node{int x,y;int date;int lazy;}node[1200];int push_up(int root){node[root].date=max(node[root<<1].date,node[root<<1|1].date);}int push_down(int root){if(node[root].lazy){int x=root<<1;int y=root<<1|1;node[x].lazy=node[root].lazy;node[y].lazy=node[root].lazy;node[x].date=node[root].lazy;node[y].date=node[root].lazy;}}int build(int root,int l,int r){    node[root].x=l;    node[root].y=r;    node[root].lazy=0;    if(l==r)    {    cin>>node[root].date;    cout<<root<<"---"<<node[root].date<<endl;    return node[root].date;    }    int mid=(l+r)>>1;build(root<<1,l,mid);build(root<<1|1,mid+1,r);push_up(root);cout<<root<<"---"<<node[root].date<<endl;}int change(int root,int k,int val){int x=node[root].x;int y=node[root].y;if(x==y){node[root].date=val; return 0;} int mid=(x+y)>>1;if(k<=mid)change(root<<1,k,val);else change(root<<1|1,k,val); push_up(root); return 0;}int   changeql(int root,int ll,int rr, int val){cout<<root<<"--"<<node[root].date<<endl;int x=node[root].x;int y=node[root].y;if(ll<=x&&rr>=y){node[root].date=val;node[root].lazy=val; return 0;} push_down(root);int mid=(x+y)>>1;if(ll<=mid)changeql(root<<1,ll,rr,val); if(rr>mid)changeql(root<<1|1,ll,rr,val); push_up(root); return 0;}int query(int root,int l,int r){cout<<root<<"--"<<node[root].date<<endl;int x=node[root].x;int y=node[root].y;if(l<=x&&r>=y){return node[root].date;}push_down(root);if(r<x||l>y)return 0;int mid=(x+y)>>1;int x1=0,x2=0;if(mid>=l)    x1=query(root<<1,l,r);    if(mid<r)x2=query(root<<1|1,l,r);return max(x1,x2);} int main(){int a[1000];int n;cin>>n;build(1,1,n);while(1){int chose ,x,y,z;cin>>chose>>x>>y;if(chose==1)change(1,x,y);else if(chose==2)cout<<query(1,x,y)<<endl; else {cin>>z;changeql(1,x,y,z); }} }

0 0
原创粉丝点击