hdu -1698 很水的线段树 lazy
来源:互联网 发布:win7网络图标打不开 编辑:程序博客网 时间:2024/06/11 19:36
题意: 屠夫有一个钩子,由n节棍子组成(编号:1-n),每节棍子可以是金-3,银-2,铜-1的材质。原本是铜组成的,会有几个操作,每一个操作是:输入l,r,num,然后把编号为[l,r]的棍子材质替换为num。求最后的所有棍子材质和。
只有一个知识点 那就是lazy,懒惰标记。
下面贴一下我我自己的代码,注解 都写在下面。
题目比较水,我也写得比较水,最后那个查询求和可以优化。
#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <set>#include <map>#include <string>#include <math.h>#include <stdlib.h>#include <time.h>using namespace std;const int MAXN = 100005;struct node{ int l,r; int lazy; //懒惰标记 int val; //表示材质}segTree[MAXN*4];void build(int L,int R,int n){ //建树 segTree[n].l=L; segTree[n].r=R; segTree[n].lazy=0; segTree[n].val=1; if(L==R) return; int mid=(L+R)/2; build(L,mid,2*n); build(mid+1,R,2*n+1);}void push_down(int n){ //更新懒惰标记的左右子树 if(segTree[n].lazy){ segTree[n].lazy=0; //一定不要忘记这一步取消懒惰标记,很容易忘记这一步导致程序崩溃。 segTree[n<<1].val=segTree[n].val; segTree[(n<<1)|1].val=segTree[n].val; segTree[n<<1].lazy=1; segTree[(n<<1)|1].lazy=1; }}void update(int l,int r,int n,int ll){ //更新区间 if(segTree[n].l==l && segTree[n].r==r){ segTree[n].lazy=1; segTree[n].val=ll; return; } push_down(n); int mid=(segTree[n].l + segTree[n].r)/2; if(r<=mid) update(l,r,n<<1,ll); else if(l>mid) update(l,r,(n<<1)|1,ll); else{ update(l,mid,n<<1,ll); update(mid+1,r,(n<<1)|1,ll); }}int query(int i,int u){ //查询 if(segTree[i].l == u && segTree[i].r == u) return segTree[i].val; push_down(i); int mid=(segTree[i].l + segTree[i].r)/2; if(u<=mid) return query(i<<1,u); else return query((i<<1)|1,u);}int main(){ int t; freopen("1.txt","r",stdin); scanf("%d",&t); for(int num=1;num<=t;num++){ printf("Case %d: ",num); int n,q; scanf("%d %d",&n,&q); build(1,n,1); while(q--){ int x,y,z; scanf("%d %d %d",&x,&y,&z); update(x,y,1,z); } int ans=0; for(int i=1;i<=n;i++){ ans+=query(1,i); } printf("The total value of the hook is %d.\n",ans); } return 0;}
0 0
- hdu -1698 很水的线段树 lazy
- poj 3468 很水的线段树lazy操作,为了理解hdu 3954 的 lazy做的。
- hdu 1556 lazy线段树
- hdu 3954(线段树的特殊lazy操作)
- hdu-4587-线段树的区间操作- lazy标记
- HDU 4027——线段树加奇怪的lazy
- 【线段树(lazy)】hdu 1698 Just a Hook
- hdu 1698 线段树 成段更新 lazy
- HDU 1698 Just a Hook(线段树+lazy)
- HDU 1698 线段树区间更新以及lazy思想
- hdu 1698 Just a Hook(线段树+lazy优化)
- hdu 1698 Just a Hook lazy线段树
- hdu 1698 线段树区间更新入门(lazy标记)
- hdu 3954 线段树 Level up 很有特色的一个题(关于lazy操作)
- hdu(4325)线段树+离散化+lazy
- HDU 3954 线段树 特殊LAZY操作
- HDU 4578 线段树 多lazy操作
- hdu 4578 线段树lazy标记
- 文本挖掘之详细整体的流程
- 标准C++中的string类的用法总结
- 1012. The Best Rank (25)
- BLE-NRF51822教程7-带协议栈工程中使用flash
- uva 12627 Erratic Expansion 递归
- hdu -1698 很水的线段树 lazy
- BLE-NRF51822教程8-软件定时器的使用
- 软件测试的一般步骤
- grape api参数为array
- Linux 下jsoncpp安装
- Tale to two lovers
- spark源码学习(十一):资源的调度Schedule
- 关于Qt Graphics编程的几点经验总结
- android Studio