HDU ACM 1698 Just a Hook->线段树+区间修改
来源:互联网 发布:淘宝如何做爆款 编辑:程序博客网 时间:2024/05/20 08:45
分析:线段树的应用,区间修改,使用延迟标记进行延迟修改。
#include<iostream>using namespace std;#define N 100010class SegmentTree{private:struct Node{int left,right; //左右子节点int sum; //区间和int lazy; //延迟标记};public:void BuildTree(int root,int l,int r);void Change(int root,int l,int r,int c);int Query(int root);private:Node m_Tree[N<<2];};int SegmentTree::Query(int root){return m_Tree[root].sum;}void SegmentTree::Change(int root,int l,int r,int c){int mid,x,y;x=m_Tree[root].left;y=m_Tree[root].right;if(l==x && r==y){m_Tree[root].lazy=1;m_Tree[root].sum=(y-x+1)*c; //区间的每个点都被修改为c,和就等于点数乘以creturn ;}mid=(x+y)>>1;if(m_Tree[root].lazy==1) //该if处理延迟更新{m_Tree[root].lazy=0;Change(2*root+1,x,mid,m_Tree[root].sum/(y-x+1)); //m_Tree[root].sum/(r-l+1)即可得到之前保留的单个点的值Change(2*root+2,mid+1,y,m_Tree[root].sum/(y-x+1));}if(l<=mid) Change(2*root+1,l,mid<r?mid:r,c); //该两句更新包含三种情况,更新区间在mid左边,在右边,左右两边均有if(r>mid) Change(2*root+2,mid+1>l?mid+1:l,r,c);m_Tree[root].sum=m_Tree[root*2+1].sum+m_Tree[root*2+2].sum;}void SegmentTree::BuildTree(int root,int l,int r){int mid;m_Tree[root].left=l;m_Tree[root].right=r;m_Tree[root].sum=r-l+1; //刚开始区间和等于区间的点数m_Tree[root].lazy=1; //设置延迟标记if(l==r) return ;mid=(l+r)>>1;BuildTree(2*root+1,l,mid); //构建左子树BuildTree(2*root+2,mid+1,r); //构建右子树}SegmentTree seg_tree;int main(){int T,n,Q,X,Y,Z,i;scanf("%d",&T);i=0;while(T--){scanf("%d",&n);seg_tree.BuildTree(0,0,n-1);scanf("%d",&Q);while(Q--){scanf("%d %d %d",&X,&Y,&Z);seg_tree.Change(0,X-1,Y-1,Z);}printf("Case %d: The total value of the hook is %d.\n",++i,seg_tree.Query(0));}return 0;}
0 0
- HDU ACM 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 1698Just a Hook(线段树区间修改)
- (HDU 1698)Just a Hook 线段树区间修改
- HDU-1698 Just a Hook (线段树 区间修改查询)
- 【hdu】Just a Hook(线段树区间修改)
- hdu 1684 Just a Hook 线段树-区间修改
- HDU 1689 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 (线段树区间修改)
- 杭电 HDU ACM 1698 Just a Hook(线段树 区间更新 延迟标记)
- hdoj 1698 Just a Hook 【线段树区间修改】
- 对于framework的目录结构分析以及简单的添加一个java层服务
- PV、UV、IP分别是什么意思?
- 新版格式化输出调试信息
- <PY><OOP>PyQt和QtDesigner混合使用(一)伯努利试验
- 进阶_计时器(postDelayed实现)_150503
- HDU ACM 1698 Just a Hook->线段树+区间修改
- PhpMyAdmin mbstring missing
- 黑马程序员_Java语言_面向对象__
- [Apio2011]方格染色
- [POJ] 2084 -> Game of Connections
- DownloadManager功能介绍
- [Unity插件]Behavior Designer:节点
- c++之超越c的语法03-变量初始化
- 字符串匹配:蛮力、KMP