博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDOJ 1698 Just a Hook
阅读量:6980 次
发布时间:2019-06-27

本文共 1168 字,大约阅读时间需要 3 分钟。

分析: 只查询一次(总和)。toadd 表示以下全部替换为此值(而不是累加)。初始每个结点为1。

类型:成段更新(lazy标记)。线段树......(ps. 据说树状数组能做成段的?怎么做?再说~...

代码:

//颜色:1 2 3//You may consider the original hook is made up of cupreous sticks.#include
#include
#include
using namespace std;#define lc e<<1#define rc e<<1|1#define MAXN 100000struct node{ int l, r, mid, v, toadd; } a[MAXN*4]; //toadd表示颜色值{0/1/2/3}int n;void pushup(int e) { a[e].v=a[lc].v+a[rc].v; }void pushdown(int e) { int t = a[e].toadd; if(t) { a[e].toadd = 0; a[lc].v=(a[lc].r-a[lc].l+1)*t; a[rc].v=(a[rc].r-a[rc].l+1)*t; a[lc].toadd=a[rc].toadd=t; }}void build(int l, int r, int e) //(1, n, 1){ a[e].l=l; a[e].r=r; if(l==r) a[e].v=1; else { a[e].mid=(l+r)>>1; build(l, a[e].mid, lc); build(a[e].mid+1, r, rc); pushup(e); }}void update(int L, int R, int c, int l, int r, int e){ if(L<=l && r<=R) { a[e].v = (a[e].r-a[e].l+1)*c; a[e].toadd = c;//printf("L:%d R:%d l:%d r:%d c:%d a[e].v=%d\n", L, R, l, r, c, a[e].v); } else // l L R r { pushdown(e); //这里不推下去怎么对!!!2~ if(L<=a[e].mid) update(L, R, c, l, a[e].mid, lc); if(a[e].mid

转载于:https://www.cnblogs.com/tclh123/archive/2011/09/19/2587061.html

你可能感兴趣的文章
记一次dll构建时机优化
查看>>
【译】Redis Hyperloglog 的转换
查看>>
mysql修改密码
查看>>
《以太坊白皮书》笔记(1)—— 比特币介绍
查看>>
babel es6 to es5
查看>>
【软件开发底层知识修炼】二 深入浅出处理器之二 中断的概念与意义
查看>>
electron打包更新与集成sqlite小总结
查看>>
CentOS 安装 pip
查看>>
React性能优化之代码分割
查看>>
Springmvc+mybatis+shiro+ZooKeeper+Redis+KafKa
查看>>
vue电商项目商品详情放大镜插件
查看>>
深入解析JSON与XML优缺点对比
查看>>
Java行为参数化(二)-Lambda表达式
查看>>
个人到账通知全量分析与总结(到账一时爽,一直到,一直爽~~)
查看>>
JavaScript 中如何实现对象的 deep clone
查看>>
Kotlin运算符重载及其他约定
查看>>
Android源码分析之 IntentService
查看>>
utilscoreJS 前端业务代码工具库(不定时更新)
查看>>
参观消防队社会实践活动,切身感受消防官兵的工作内容和日常生活安排
查看>>
iOS多线程开发:几个容易被忽略的细节
查看>>