cogs2554 [福利]可持久化线段树

原题链接

每次修改复制一遍就行了。。。

1A!!!

// It is made by XZZ
#include<cstdio>
#include<algorithm>
#define Fname "longterm_segtree"
using namespace std;
#define rep(a,b,c) for(rg int a=b;a<=c;a++)
#define drep(a,b,c) for(rg int a=b;a>=c;a--)
#define erep(a,b) for(rg int a=fir[b];a;a=nxt[a])
#define il inline
#define rg register
#define vd void
#define mid ((l+r)>>1)
typedef long long ll;
il int gi(){
rg int x=0,f=1;rg char ch=getchar();
while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
typedef struct node* point;
struct node{
int max;
point ls,rs;
node(int _max){max=_max,ls=rs=NULL;}
};
point root[100001];
int num[10001];
point build(int l,int r){
point now=new node(19260817);
if(l==r)now->max=num[l];
else now->ls=build(l,mid),now->rs=build(mid+1,r),now->max=max(now->ls->max,now->rs->max);
return now;
}
il int Max(point now,int l,int r,int ll,int rr){
if(ll<=l&&r<=rr)return now->max;
if(mid<rr)
if(mid+1>ll)return max(Max(now->ls,l,mid,ll,rr),Max(now->rs,mid+1,r,ll,rr));
else return Max(now->rs,mid+1,r,ll,rr);
else return Max(now->ls,l,mid,ll,rr);
}
il vd Update(point&now,point fr,int l,int r,int pos,int num){
now=new node(19260817),*now=*fr;
if(l==r){now->max=num;return;}
if(pos<=mid)Update(now->ls,fr->ls,l,mid,pos,num);
else Update(now->rs,fr->rs,mid+1,r,pos,num);
now->max=max(now->ls->max,now->rs->max);
}
int main(){
freopen(Fname".in","r",stdin);
freopen(Fname".out","w",stdout);
int n=gi(),q=gi(),cnt=0;
rep(i,1,n)num[i]=gi();
root[++cnt]=build(1,n);
int opt;
int k,a,b;
while(q--){
opt=gi();
k=gi(),a=gi(),b=gi();
if(opt==0)printf("%d\n",Max(root[k],1,n,a,b));
else Update(root[++cnt],root[k],1,n,a,b);
}
return 0;
}

好慢mdzz。。。

最新文章

  1. python setuptools工具打包
  2. Bzoj3510首都
  3. 【BZOJ】2253: [2010 Beijing wc]纸箱堆叠
  4. iOS 用collectionview 做的无限图片滚动 广告banner适用
  5. java变量的作用域
  6. redis watch multi exec 关系
  7. .net 4.0 ValidateRequest=&quot;false&quot;
  8. java io操作常规
  9. uploadify插件的使用
  10. Oracle EBS-SQL (SYS-1): sysadmin_用户职责查询.sql
  11. Java中需要总结的几个问题
  12. 双显卡笔记本安装CUDA+theano、tensorflow环境
  13. java 学习笔记——类之间的关系之封装、继承与多态的详解
  14. 使用UE4/Unity创建VR项目
  15. POJ 1324 Holedox Moving (状压BFS)
  16. shell的输入参数
  17. Java入门(五):控制流程
  18. datatable实例教程
  19. 在Qt项目中如何添加一个已有的项目作为子项目
  20. linux每日命令(33):diff命令

热门文章

  1. 在Windows 10中更改网络连接优先级
  2. Apollo深度磁盘清理
  3. java中NULL与&quot; &quot;的区别
  4. JBPM学习(四):运行流程实例
  5. mysql数据库锁简介
  6. macOS:按钮类型
  7. throws、throw和try catch
  8. 19-3-15Python中闭包,迭代器,递归
  9. 自己动手写一个简易对象关系映射,ORM(单例版和数据库池版)
  10. JavaScript碎片———函数闭包(模拟面向对象)