Just a Hook HDU
来源:互联网 发布:如何做免费网络推广 编辑:程序博客网 时间:2024/06/05 18:16
这题属于区间更新的问题,和之前的题目不同的地方是该题是把值改变,而不是加起来,在原来代码的基础上改一改就差不多了
/*If I get TLE , it is good.If I get AC,it's NICE !*/#include <stdio.h>#include <iostream>#include <algorithm>#include <string.h>using namespace std;typedef long long ll;const int MAXN=1e5+1000;const int MOD=1e9+7;int n;int newv;struct node{ int l,r,v,c; //c:lazy , v:sum}segtree[4*MAXN];void update(int l,int r,int root){ if(segtree[root].l==l && segtree[root].r==r) { segtree[root].v=(r-l+1)*newv; segtree[root].c=newv; return ; } //如果用到当前区间的子区间,那么就要把父亲的信息传递下去 if(segtree[root].c!=0) { segtree[root*2].c=segtree[root*2+1].c=segtree[root].c; segtree[root*2].v=(segtree[root*2].r-segtree[root*2].l+1)*segtree[root].c; segtree[root*2+1].v=(segtree[root*2+1].r-segtree[root*2+1].l+1)*segtree[root].c; segtree[root].c=0; } int mid=(segtree[root].l+segtree[root].r)/2; if(r<=mid) update(l,r,root*2); else if(l>=mid+1) update(l,r,root*2+1); else { update(l,mid,root*2); update(mid+1,r,root*2+1); } segtree[root].v=segtree[root*2].v+segtree[root*2+1].v;}void build(int l,int r,int root)//正常建树{ segtree[root].l=l,segtree[root].r=r,segtree[root].v=0,segtree[root].c=0; //必须要初始化,不初始v=0会导致wawawa if(l==r) { segtree[root].v=1; return ; } int mid=(l+r)/2; build(l,mid,root*2); build(mid+1,r,root*2+1); segtree[root].v=segtree[root*2].v+segtree[root*2+1].v;}int main(void){ int t; cin >> t; for(int k=1;k<=t;k++) { int n; scanf("%d",&n); build(1,n,1); int q; scanf("%d",&q); while(q--) { int l,r; scanf("%d%d%d",&l,&r,&newv); update(l,r,1); } /*for(int i=1;i<=15;i++) printf("%d-----%d\n",i,segtree[i].v);*/ printf("Case %d: The total value of the hook is %d.\n",k,segtree[1].v); }}
通过这道题我get了什么?
1.对于区间更新的问题,用一个标记来标记父亲节点所作的操作,那么如果不访问该节点的子节点,就不用往下传递,直接用父亲节点的信息即可,如果要访问该子节点的信息,就要做一个pushdown的操作。加深了lazy对节省时间的巨大作用,这就是线段树能节省时间的巨大原因了,即空间换时间。
2.记得对segtree[root].v初始化为0,否则在pushdown的操作就很蛋疼了…
3.思考不同题目要有个思维建立的过程,很重要,对不同的题思路是不同的
阅读全文
0 0
- hdu Just a Hook
- HDU Just a Hook
- Just a Hook HDU
- Just a Hook HDU
- Just a Hook HDU
- Just a Hook HDU
- Just a Hook HDU
- Just a Hook (HDU
- Just a Hook HDU
- Just a Hook HDU
- Just a Hook HDU
- Just a Hook HDU
- hdu 1698 Just a Hook
- hdu 1698 Just a Hook
- Hdu 1698 Just a Hook
- hdu 1698 Just a Hook
- hdu 1698 just a hook
- hdu 1698 Just a Hook
- 关于数组方面的大小计算
- 《virtualbox完全学习手册》之 虚拟机也玩多屏显示
- 搭建hibernate
- POJ 3311 Hie with the Pie (状态压缩DP ,TSP问题)
- TensorFlow进阶:CNN对CIFAR10图像分类
- Just a Hook HDU
- reveal 4 for xcode 8 2017 reveal配置xcode详解
- 让网页中footer总在底部的有效办法
- 华为OJ——按字节截取字符串
- 列表以及自定义列表的使用
- JAVA基础—递归的使用
- POJ 1844 Sum 笔记
- 关于CSS内容
- python实现剑指offer系列2:字符串空格替换