[luogu]1531 线段树
来源:互联网 发布:focusky for mac中文 编辑:程序博客网 时间:2024/06/13 09:18
今天整理线段树,发现了一份比较神奇的代码
不需要记录左子树的范围和右子树的范围
伪代码如下:
struct Segment{//好像不少人是这样的 int v,tag;//有的题标记都不用};
只需传递整棵树的范围:[L,R]
左子树:[L,(L+R)/2]
右子树:[(L+R)/2+1,R]
以此类推,大大地节约了空间
来一道题练练手:
luoguP1531
完整代码
#include<cstdio>#include<iostream>#define N 200010#define INF 2147483647using namespace std;struct tree{ int v;}t[4*N];int n,m,p,q,w;char c;int rd(){ char ch; int p=0,q=1; while((ch=getchar())<'0'||ch>'9')if(ch=='-')q=-1; while(ch>='0'&&ch<='9')p=p*10+ch-'0',ch=getchar(); return p*q;}void add(int x,int l,int r){ if(l==r){ t[x].v+=q; return; } if(p<=(l+r)/2)add(2*x,l,(l+r)/2); else add(2*x+1,(l+r)/2+1,r); t[x].v=max(t[2*x].v,t[2*x+1].v);}int find(int x,int l,int r){ if(l==r)return t[x].v; if(p<=(l+r)/2)return find(2*x,l,(l+r)/2); return find(2*x+1,(l+r)/2+1,r);}int query(int x,int l,int r){ if(p<=l&&r<=q)return t[x].v; int ans=-INF; if(p<=(l+r)/2)ans=max(ans,query(2*x,l,(l+r)/2)); if(q>=(l+r)/2+1)ans=max(ans,query(2*x+1,(l+r)/2+1,r)); return ans;}int main(){// scanf("%d%d",&n,&m); n=rd(); m=rd(); for(int i=1;i<=n;i++){// scanf("%d",&q); q=rd(); p=i; add(1,1,n); } for(int i=1;i<=m;i++){ while((c=getchar())!='Q'&&c!='U');// scanf("%d%d",&p,&q); p=rd(); q=rd(); if(c=='Q')printf("%d\n",query(1,1,n)); else if((q-=find(1,1,n))>0)add(1,1,n); }}
阅读全文
0 0
- [luogu]1531 线段树
- Luogu 3384 树链剖分+线段树
- luogu 1816忠诚 线段树
- Luogu-P3372 (Lazy_tag 线段树模板)
- [DP] [1D1D优化] [线段树] [Luogu P1725] 琪露诺
- Luogu P1198 BZOJ 1012 最大数 (线段树)
- Luogu 3373(线段树标记混合下传)
- Luogu P2970 自私的放牧+线段覆盖
- 【BZOJ/Luogu】1798/P3373 [Ahoi2009]Seq 维护序列seq/【模板】线段树 2 区间加、乘线段树
- luogu p1087 FBI树
- luogu P3252 [JLOI2012]树
- LuoGu 1983 浅谈如何【车站分级】即数据架构调整加强线段树优化时空复杂度转换
- Luogu P3396普通平衡树
- Luogu-3834 (主席树模板)
- Luogu 3919(主席树)
- Luogu 1972(主席树)
- luogu解题报告:P3391文艺平衡树
- 线段树?线段树!
- 织梦cms教程:如何优化dedecms模板做的网站?
- 【北京·签约】新东方满天星幼儿园携手中企动力布局互联网全网营销
- mysql的读写分离和主从复制
- java异常:Transaction rolled back because it has been marked as rollback-only
- c语言基础
- [luogu]1531 线段树
- Unity3D 08-Android加密DLL
- 织梦cms模板下载:响应式机械螺丝设备网站模板
- Linux下子进程的异步等待
- jQuery选择器
- STM32 Bootload 程序
- 快速在本地搭建https项目
- redis分布式锁实现控制并发
- Golang 如何定义一个接口类型的切片,它可以用来存储混合类型的数据,又如何自定义错误信息输出,以及如何定义变参函数,还有字符串多种拼接方式