【模板】线段树

来源:互联网 发布:冒险岛2装备数据库 编辑:程序博客网 时间:2024/06/04 01:09
#include<math.h>#include<algorithm>#include<iostream>using namespace std;struct node{    int left,right;    int max;    node()    {        max=0;    }}tree[1000000];int a[200000],ans;int Build(int left,int right,int i){    tree[i].left=left;    tree[i].right=right;    if(left==right)        return tree[i].max=a[left];    int mid=(left+right)/2;    int a=Build(left,mid,2*i);    int b=Build(mid+1,right,2*i+1);tree[i].max=max(a,b);}void update(int a,int b,int i){    if(tree[i].left==tree[i].right&&tree[i].left==a)    {        tree[i].max=b;        return;    }    if(a<=(tree[i].left+tree[i].right)/2)        update(a,b,2*i);    else        update(a,b,2*i+1);    tree[i].max=max(tree[2*i].max,tree[2*i+1].max);}int Query(int left,int right,int i){    if(tree[i].left==left&&tree[i].right==right)return tree[i].max;    int mid=(tree[i].left+tree[i].right)/2;    if(right<=mid) Query(left,right,2*i);    else if(left>mid) Query(left,right,2*i+1);    elsereturn max(Query(left,mid,2*i),Query(mid+1,right,2*i+1));}

0 0
原创粉丝点击