cogs2554 [福利]可持久化线段树
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。。。
cogs2554 [福利]可持久化线段树的更多相关文章
- cogs 2554. [福利]可持久化线段树
题目链接 cogs 2554. [福利]可持久化线段树 题解 没有 代码 #include<cstdio> #include<cstring> #include<algo ...
- AC日记——[福利]可持久化线段树 cogs 2554
2554. [福利]可持久化线段树 ★★☆ 输入文件:longterm_segtree.in 输出文件:longterm_segtree.out 简单对比时间限制:3 s 内存限制:2 ...
- YSZOJ:#247. [福利]可持久化线段树 (最适合可持久化线段树入门)
题目链接:https://syzoj.com/problem/247 解题心得: 可持久化线段树其实就是一个线段树功能的加强版,加强在哪里呢?那就是如果一颗普通的线段树多次修改之后还能知道最开始的线段 ...
- [COGS2554][SYZOJ247][福利]可持久化线段树
思路: 主席树模板. 注意内存的分配,原始的线段树有$2n$个结点,每次更新时最多增加$log(n)$个结点,总共有$q$次询问,所以存储结点的数组大小为$2N+q log(n)$. #include ...
- PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树
#44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...
- 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 1878 Solved: 846[Submit][Status ...
- 【BZOJ-2653】middle 可持久化线段树 + 二分
2653: middle Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1298 Solved: 734[Submit][Status][Discu ...
- HDU 4866 Shooting(持久化线段树)
view code//第二道持久化线段树,照着别人的代码慢慢敲,还是有点不理解 #include <iostream> #include <cstdio> #include & ...
- 【BZOJ-3653】谈笑风生 DFS序 + 可持久化线段树
3653: 谈笑风生 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 628 Solved: 245[Submit][Status][Discuss] ...
随机推荐
- BZOJ1972:[SDOI2010]猪国杀(模拟)
Description 太长就不贴过来了 Solution 这个题是真的不难写……唯一的难度就在于理解题意上面……感觉这就是个阅读理解题啊…… 而且你三国杀玩的越多可能就越难写因为你无法理解那些猪的思 ...
- 【[CQOI2018]交错序列】
这个题简直有毒,\(O((a+b)^3logn)\)的做法不卡常只比\(O(2^n*n)\)多\(10\)分 看到\(a\)和\(b\)简直小的可怜,于是可以往矩阵上联想 发现这个柿子有些特殊,好像可 ...
- mysql 数据增删改查基本语句
增: insert insert into 表名(字段1,字段2,字段3......字段N) values(值1,值2,值3): 如果不申明插入那些字段,则默认所有字段. 如果一次可以插入多条数据 可 ...
- C/C++——存储
关于各内存空间: 栈(stack):变量,数组.栈的大小是2M(也有的是1M),反正不大,一般递归写错了,没有出口,都会报错stack overflow. 全局区(静态区):全局变量.数组,静态变量. ...
- Kali-linux查看打开的端口
对一个大范围的网络或活跃的主机进行渗透测试,必须要了解这些主机上所打开的端口号.在Kali Linux中默认提供了Nmap和Zenmap两个扫描端口工具.为了访问目标系统中打开的TCP和UDP端口,本 ...
- l2-loss,l2正则化,l2范数,欧式距离
欧式距离: l2范数: l2正则化: l2-loss(也叫平方损失函数): http://openaccess.thecvf.com/content_cvpr_2017/papers/Li_Mimic ...
- NodeJS平台下的前后端文件共享
一.前后端文件共享的需要背景——为什么需要共享? 项目基本JS/NodeJS全端开发,有部分代码前后端都需要用得到 有一些配置是在前后端都需要用得到的 区别其他开发平台,NodeJS平台下的前后端文件 ...
- mysql查询某个数据库表的数量
在mysql中有个数据库information_schema下的表tables记录了所有数据库中所有的表相关信息 TABLE_SCHEMA 数据库名称 SELECT COUNT( * ) FROM i ...
- JNDI数据源(在Tomcat下配置JNDI多数据源实例)
一,添加数据库驱动包加入classpath. 这里我用到了oracle和mysql.所以由两个jar包:ojdbc14.jar和mysql-connector-java-5.1.13-bin.jar. ...
- multiprocessing进程开发RuntimeError
windows环境下multiprocessing报如下异常信息: RuntimeError: An attempt has been made to start a new process befo ...