线段树之快速构树

转载 2018年04月17日 15:45:38

#include<iostream>
#include<algorithm>
using namespace std;
const int Kmax=200000+10;
struct node{
    int l,r,snv;//节点自带了数据范围
}apple[Kmax<<2];

void pushup(int p){
    apple[p].snv=max(apple[p<<1].snv,apple[p<<1|1].snv);
}

void build(int p,int l,int r){//快速构建线段树,构建与修改分离
    apple[p].l=l;
    apple[p].r=r;
    if(l==r){
        cin>>apple[p].snv;
        return;//别漏
    }
    int mid=(l+r)>>1;
    build(p<<1,l,mid);
    build(p<<1|1,mid+1,r);
    pushup(p);
}

int query(int p,int l,int r){
    if(l<=apple[p].l&&apple[p].r<=r){
        return apple[p].snv;
    }
    int res=0;
    int  mid=(apple[p].l+apple[p].r)>>1;
    if(l<=mid){
        res=max(res,query(p<<1,l,r));
    }
    if(mid<r){
        res=max(res,query(p<<1|1,l,r));
    }
    return res;
}

void modify(int p,int x,int y){//单点修改
    if(apple[p].l==apple[p].r&&apple[p].l==x){
        apple[p].snv=y;
        return;
    }
    int  mid=(apple[p].l+apple[p].r)>>1;
    if(x<=mid){
        modify(p<<1,x,y);
    }
    else{
        modify(p<<1|1,x,y);
    }
    pushup(p);
}

int main(){
    std::ios::sync_with_stdio(false);
    int n,m;
    cin>>n>>m;
    build(1,1,n);
    char op;
    int x,y;
    for(int i=0;i<m;i++){
        cin>>op>>x>>y;
        if(op=='Q'){
            cout<<query(1,x,y)<<endl;
        }
        else{
            modify(1,x,y);
        }
    }
    return 0;
}

POJ 3468 线段树区间更新求和模板

A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Subm...
  • discreeter
  • discreeter
  • 2015-08-04 20:19:18
  • 963

线段树-代码实现细节与技巧

写代码,就是不断地去模仿他人代码,总结出其中要点,再加上自己的体会。...
  • yangle61
  • yangle61
  • 2016-08-11 09:56:43
  • 905

树结构的应用之基于树的索引结构介绍

树结构的应用之基于树的索引结构介绍 转眼又七月份了。6月份后来就变成考试月了。因为图论要求写阅读报告,某天看数据库的空间索引时,又正好看到关于基于树的一些索引技术,于是产生了以此为主题写份阅读报...
  • zolalad
  • zolalad
  • 2014-07-28 09:01:21
  • 1960

线段树的资料 线段树的学习

  • 2010年04月02日 15:38
  • 358KB
  • 下载

树的结构树的结构树的结构树的结构

  • 2010年05月08日 21:56
  • 61KB
  • 下载

几道经典线段树题目及代码

  • 2009年07月22日 13:09
  • 6KB
  • 下载

Kruskal重构树

讲解&模板 http://blog.csdn.net/wu_tongtong/article/details/77601523上面那个代码是我自己yy的 这个是从网上扒拉的dalao的kruska...
  • wu_tongtong
  • wu_tongtong
  • 2017-08-26 15:46:34
  • 336

线段树ppt的好东东

  • 2009年07月23日 11:21
  • 140KB
  • 下载

线段树 树状数组 数据结构

  • 2011年07月24日 11:42
  • 1.29MB
  • 下载
收藏助手
不良信息举报
您举报文章:线段树之快速构树
举报原因:
原因补充:

(最多只允许输入30个字)