/*
之前的思想是用回溯的方式进行颜色的更新的!如果用回溯的方法的话,就是将每一个节点的颜色都要更新
通过子节点的颜色情况来判断父节点的颜色情况 !这就是TLE的原因! 后来想一想没有必要 !加入[a, b] 区间有p管辖,那么tree[p]的颜色值就是[a, b]所有点的颜色值!
如果[a,b]的子区间[c,d]没被跟新,那么tree[p]也是[c,d]的值!
否则,在更新[c,d]区间的时候,一定会经过 p 点!然后由上到下更新p<<1 和 p<<1|1 的值!
当找到[c,d]区间所对应的p‘时,并更新p’的值!、 之前的剪枝是点返回, 后面的是线段返回,当然更快!
*/
#include<string>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#define M 100005
using namespace std; int tree[*M]; int color[];
int L, T, O; void buildT(int ld, int rd, int p){
if(ld<=rd){
tree[p]=;
if(ld==rd)
return ;
int mid = (ld+rd)/;
buildT(ld, mid, p<<);
buildT(mid+, rd, p<<|);
}
} void updateT(int ld, int rd, int a, int b, int p, int k){
if(tree[p] == k) return ;//如果当前更新的颜色和 之前p所管辖的区间的颜色相同,则返回 if(ld==a && rd==b){//p所管辖的区间的点的颜色全部是k!如果其子区间的颜色被更改,那么
tree[p]=k; //在更新子区间的时候一定会经过 p点,让后通过p更新 p<<1 和 p<<1|1 子区间的颜色!
return ;
} if(tree[p]!=-){//也就是在经过父节点时更新子节点的颜色状态,也就是[a,b]包含在 p点所管辖的区间内
tree[p<<] = tree[p<<|] = tree[p];
tree[p]=-;
}
if(ld<rd){
int mid = (ld+rd)/;
if(mid<a)
updateT(mid+, rd, a, b, p<<|, k);
else if(mid>=b)
updateT(ld, mid, a, b, p<<, k);
else{
updateT(ld, mid, a, mid, p<<, k);
updateT(mid+, rd, mid+, b, p<<|, k);
}
}
} void queryT(int ld, int rd, int a, int b, int p){
if(ld>rd) return ;
if(tree[p]!=-){
color[tree[p]]=;
}
else{
int mid = (ld+rd)/;
if(mid<a)
queryT(mid+, rd, a, b, p<<|);
else if(mid>=b)
queryT(ld, mid, a, b, p<<);
else{
queryT(ld, mid, a, mid, p<<);
queryT(mid+, rd, mid+, b, p<<|);
}
}
} int main(){ while(scanf("%d%d%d", &L, &T, &O)!=EOF){
buildT(, L, );
while(O--){
char ch[];
int a, b, c;
scanf("%s", ch);
if(ch[]=='C'){
scanf("%d%d%d", &a, &b, &c);
if(a>b){
a^=b;
b^=a;
a^=b;
}
updateT(, L, a, b, , c);
}
else{
scanf("%d%d", &a, &b);
if(a>b){
a^=b;
b^=a;
a^=b;
}
memset(color, , sizeof(color));
queryT(, L, a, b, );
int cnt=;
for(int i=; i<=T; ++i)
if(color[i]) ++cnt;
printf("%d\n", cnt);
}
}
}
return ;
}

poj 2777(线段树的节点更新策略)的更多相关文章

  1. poj 2777 线段树的区间更新

    Count Color Time Limit: 1000 MS Memory Limit: 65536 KB 64-bit integer IO format: %I64d , %I64u Java ...

  2. poj 3648 线段树成段更新

    线段树成段更新需要用到延迟标记(或者说懒惰标记),简单来说就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新or询问到的时候.延迟标记的意思是:这个区间的左右儿子都需要被更新,但是当 ...

  3. poj 2777(线段树+lazy思想) 小小粉刷匠

    http://poj.org/problem?id=2777 题目大意 涂颜色,输入长度,颜色总数,涂颜色次数,初始颜色都为1,然后当输入为C的时候将x到y涂为颜色z,输入为Q的时候输出x到y的颜色总 ...

  4. poj 2777线段树应用

    敲了n遍....RE愉快的debug了一晚上...发现把#define maxn = 100000 + 10 改成 #define maxn = 100010 就过了....感受一下我呵呵哒的表情.. ...

  5. POJ 2777——线段树Lazy的重要性

    POJ 2777 Count Color --线段树Lazy的重要性 原题 链接:http://poj.org/problem?id=2777 Count Color Time Limit: 1000 ...

  6. POJ 2777(线段树)

    Count Color Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 42507   Accepted: 12856 Des ...

  7. POJ 3468 线段树 成段更新 懒惰标记

    A Simple Problem with Integers Time Limit:5000MS   Memory Limit:131072K Case Time Limit:2000MS Descr ...

  8. Count Color POJ - 2777 线段树

    Chosen Problem Solving and Program design as an optional course, you are required to solve all kinds ...

  9. POJ 2777 线段树基础题

    题意: 给你一个长度为N的线段数,一开始每个树的颜色都是1,然后有2个操作. 第一个操作,将区间[a , b ]的颜色换成c. 第二个操作,输出区间[a , b ]不同颜色的总数. 直接线段树搞之.不 ...

随机推荐

  1. [Leetcode][JAVA] Interleaving String

    Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example,Given:s1 = ...

  2. Python学习之路—Day1

    第1章 Python语言简介 1.1 Python是什么 Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn)是什么呢?简单的说,它是一种计算机编程语言及一组配套的软件工具和库. ...

  3. jdk1.6 webService 客户端代码生成和测试

    参数:测试webService的地址:http://10.113.11.1:9090/enocpService/buildingEngService?wsdl 1,eclipse中新建一个项目, 2, ...

  4. Happy Programming Contest(ZOJ3703)(01背包+路径储存)

    Happy Programming Contest  ZOJ3703 老实说:题目意思没看懂...(希望路过的大神指点) 最后那个the total penalty time是什么意思啊!!! 还是学 ...

  5. java jstack命令详解

    名称jstack: stack trace 摘要: jstack [ option ] pid jstack [ option ] executable core jstack [ option ] ...

  6. bootstrap-sidebar,后台边栏折叠功能

    http://www.solutiisoft.com/bootstrap-sidebar/index.php

  7. 使用 CXF 做 webservice 简单例子

    Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构.它允许创建高性能和可扩展的服务,您可以将这样的服务部署在 Tomcat 和基于 Spring 的轻量 ...

  8. 用nifi executescript 生成3小时间隔字符串

    import java.io from datetime import datetime from org.apache.commons.io import IOUtils from java.nio ...

  9. Web Essentials之样式表StyleSheets

    返回Web Essentials功能目录 本篇目录 智能感知 视觉提示 验证 Web标准 转换器 Web Essentials中大多数的CSS功能也适用于LESS. 智能感知 生成供应商特定的属性 如 ...

  10. SQL SERVER--DBA 常用到的一些脚本

    自己整理了一些常用到的脚本,希望对各位有用 下载地址 --================================== 妹子不能少,是吧 BTW, 妹子是我辛苦百度来的,请不要求种求介绍各种求 ...