博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU_1556 Color the ball(线段树)
阅读量:5755 次
发布时间:2019-06-18

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

  结构体中定义记录染色次数的参数(cov),更新时直接找到对应的区间,使cov++。查询时要有点小操作。

查询过程:

void query(当前节点 t,要查询的点 x) {
    if(找到要查询的点)    return cov;     if(该点的cov > 0) {
 左孩子.cov += 当前节点.cov;         右孩子.cov += 当前节点.cov;  当前节点.cov = 0;     } mid = (左孩子+右孩子) >> 1; if(x <= mid)              query(左孩子, x); else   query(右孩子, x); }

下边是完整的代码:

ContractedBlock.gif
ExpandedBlockStart.gif
View Code
#include 
#define N 100010 struct node {
int l, r; int cov; }node[N*4]; int ans; void creat(int t, int l, int r) {
node[t].l = l; node[t].r = r; node[t].cov = 0; if(l == r) return; int mid = (node[t].l + node[t].r) >> 1; creat(t<<1, l, mid); creat(t<<1|1, mid+1, r); } void updata(int t, int l, int r) {
if(node[t].l >= l && node[t].r <= r) {
node[t].cov++; return; } int mid = (node[t].l + node[t].r) >> 1; if(l > mid) updata(t<<1|1, l, r); else if(r <= mid) updata(t<<1, l, r); else {
updata(t<<1, l, mid); updata(t<<1|1, mid+1, r); } } void query(int t, int x) {
if(node[t].l == node[t].r) {
ans = node[t].cov; return; } if(node[t].cov > 0) {
node[t<<1].cov += node[t].cov; node[t<<1|1].cov += node[t].cov; node[t].cov = 0; } int mid = (node[t].l + node[t].r) >> 1; if(x <= mid) query(t<<1, x); else query(t<<1|1, x); } int main() {
int n, i, x, y; //freopen("data.in", "r", stdin); while(scanf("%d", &n), n) {
creat(1, 1, n); for(i = 1; i <= n; i++) {
scanf("%d%d", &x, &y); updata(1, x, y); } for(i = 1; i < n; i++) {
query(1, i); printf("%d ", ans);//printf("ok\n"); } query(1, n); printf("%d\n", ans); } return 0; }

转载地址:http://dvckx.baihongyu.com/

你可能感兴趣的文章
siki学习之观察者模式笔记
查看>>
spring.net 继承
查看>>
ES6:模块简单解释
查看>>
JavaScript indexOf() 方法
查看>>
ZJU PAT 1023
查看>>
WMI远程访问问题解决方法
查看>>
Android开发历程_15(AppWidget的使用)
查看>>
阿花宝宝 Java 笔记 之 初识java
查看>>
Linux下的C编程实战
查看>>
[32期] html中部分代码与英语单词关系
查看>>
PHP安装环境,服务器不支持curl_exec的解决办法
查看>>
jQuery|元素遍历
查看>>
用 ThreadLocal 管理用户session
查看>>
setprecision后是要四舍五入吗?
查看>>
上云就是这么简单——阿里云10分钟快速入门
查看>>
MFC多线程的创建,包括工作线程和用户界面线程
查看>>
我的友情链接
查看>>
FreeNAS8 ISCSI target & initiator for linux/windows
查看>>
PostgreSQL数据库集群初始化
查看>>
++重载
查看>>