题意:给一段0-8000的线段染色 问最后 颜色x 有几段

题解:标准线段树  但是没有push_up  最后查询是单点按顺序查询每一个点

考虑过使用区间来维护不同的线段有多少种各色的线段  思路是 两个子区间合并:左子区最右边和右子区最左边如果相同,那么就不变,不同就+1  但是不好维护  所以直接单点查还更方便

注意  染色是染区间不是染点 例如   0  3是染  0 1 2 3这4个数中间的空  如果不考虑清楚这一点就会导致 染了  2-3 颜色1  0 2颜色2   3-4颜色3  0 到4颜色分别为   2 2 3 3只有两种颜色 而如果是染区间的话

2 3区间中染了 1 后面的操作都没有覆盖掉 所以要把边映射成点    n个点有n-1个边 那么很自然  把第一条边成1   8000也就是8000了 update就要 符合映射 让 l+1  即可

 #include<cstdio>
#include<algorithm>
#include<set>
#include<vector>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=+;
int num[maxn],ans[maxn];
struct Node{
int l,r,lazy,v;
void update(int x){
v=x;
lazy=x;
}
}tree[maxn*];
void push_up(int x){ }
void push_down(int x){
int lazyval=tree[x].lazy;
if(lazyval!=-){
tree[x<<].update(lazyval);
tree[x<<|].update(lazyval);
tree[x].lazy=-;
}
}
void update(int x,int l,int r,int c){
int L=tree[x].l,R=tree[x].r;
if(l<=L&&R<=r){
tree[x].update(c);
}
else{
int mid=L+R>>;
push_down(x);
if(mid>=l)update(x<<,l,r,c);
if(mid<r)update(x<<|,l,r,c);
// push_up(x);
}
}
int lastcolor=-;
int query(int x,int l,int r){
//int L=tree[x].l,R=tree[x].r;
if(l==r){
if(tree[x].v!=-&&tree[x].v!=lastcolor)ans[tree[x].v]++;
lastcolor=tree[x].v;
//if(lastcolor!=-1)cout<<l<<" " <<x<<" "<<tree[x].v<<endl;
}
else {
push_down(x);
int mid=l+r>>;
query(x<<,l,mid);
query(x<<|,mid+,r);
}
}
void build(int x,int l,int r){
tree[x].l=l,tree[x].r=r;
tree[x].lazy=-;
if(l==r){
tree[x].v=-;
//if(l==8000)cout<<" !zzz! "<<x<<endl;
return ;
}
else {
int mid=l+r>>;
build(x<<,l,mid);
build(x<<|,mid+,r);
//push_up(x);
} }
int main(){
int n;
while(scanf("%d",&n)==)
{
lastcolor=-;
build(,,);
memset(ans,,sizeof(ans));
for(int i=;i<=n;i++){
int x,y,c;
scanf("%d%d%d",&x,&y,&c);
update(,x+,y,c);
}
// cout<<tree[8286].v<<"!! "<<endl;
query(,,);
// cout<<tree[8286].v<<" 22222"<<endl;
for(int i=;i<=;i++){
if(ans[i]){
printf("%d %d\n",i,ans[i]);
}
}
cout<<endl;
}
}

F - Count the Colors ZOJ - 1610 线段树染色(染区间映射)的更多相关文章

  1. F - Count the Colors - zoj 1610(区间覆盖)

    有一块很长的画布,现在想在这块画布上画一些颜色,不过后面画的颜色会把前面画的颜色覆盖掉,现在想知道画完后这块画布的颜色分布,比如 1号颜色有几块,2号颜色有几块.... *************** ...

  2. ZOJ 1610 Count the Colors【题意+线段树区间更新&&单点查询】

    任意门:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1610 Count the Colors Time Limit: 2 ...

  3. (线段树) Count the Colors --ZOJ --1610

    链接: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82832#problem/F http://acm.zju.edu.cn/onli ...

  4. kuangbin专题七 ZOJ1610 Count the Colors (灵活线段树)

    Painting some colored segments on a line, some previously painted segments may be covered by some th ...

  5. Count the Colors ZOJ - 1610 区间颜色覆盖

    #include<stdio.h> #include<iostream> #include<string.h> #include<algorithm> ...

  6. F - Count the Colors

    F - Count the Colors ZOJ - 1610   思路:调了一个小时,但是发现自己线段树木有写错,颜色统计出了错误.但是不明白自己颜色统计为什么错了. 求大佬指点迷津.思路很简单,就 ...

  7. ZOJ - 1610 经典线段树染色问题

    这个是一个经典线段树染色问题,不过题目给的是左右左右坐标,即[0,3]包含0-1这一段 1-2这一段 2-3这一段,和传统的染色不太一样,不过其实也不用太着急. 我们把左边的坐标+1,即可,那么[0, ...

  8. ZOJ 3279-Ants(线段树)

    传送门:zoj 3279 Ants Ants Time Limit: 2 Seconds      Memory Limit: 32768 KB echo is a curious and cleve ...

  9. AtCoder Regular Contest 069 F Flags 二分,2-sat,线段树优化建图

    AtCoder Regular Contest 069 F Flags 二分,2-sat,线段树优化建图 链接 AtCoder 大意 在数轴上放上n个点,点i可能的位置有\(x_i\)或者\(y_i\ ...

随机推荐

  1. Typescript 发布到npm

    https://blog.csdn.net/yiershan1314/article/details/79999726 https://cloud.tencent.com/developer/arti ...

  2. Redis系列文章总结:ASP.Net Core 中如何借助CSRedis实现一个安全高效的分布式锁

    引言:最近回头看了看开发的.Net Core 2.1项目的复盘总结,其中在多处用到Redis实现的分布式锁,虽然在OnResultExecuting方法中做了防止死锁的处理,但在某些场景下还是会发生死 ...

  3. flask登录插件 flask-login

    Flask-Login为Flask提供了用户会话管理,它处理了日常的登入登出且长时间记住用户的会话 使用: 1.配置,初始化 LoginManager 创建实例 loginManger = Login ...

  4. C++ string中的find()函数

    1.string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回一个特别的标记npos.(返回值可以看成是一个int型的数) #include<cstring> ...

  5. React不同版本之间需要注意的地方

    React Fiber react fiber指的是react16.0机器之后的版本,相对于之前的版本来说,这一个版本的更新做了很多的优化,所以和之前的版本中的用法可能会发生不同,所以,平常开发中,主 ...

  6. 【问题解决方案】The MathType Dll cannot be found 问题解决方案

    先贴几个可能的方法: 如何解决MathPage.wll或MathType.dll文件找不到问题 The MathType Dll cannot be found 问题解决办法 如果还搞不定,试试卸载重 ...

  7. selenium模拟登陆淘宝

    from selenium import webdriver import time from selenium.webdriver.common.by import By from selenium ...

  8. Linux基础命令和NAT技术

    yum    yellowdog updater,modified是一种用python写的基于rpm的管理工具 用于解决rpm包的依赖性 要安装编译工具 yum install gcc 库函数:静态库 ...

  9. websocket协议握手详解

    最近使用tornado做长链接想着怎么着也要试试websocket协议吧.所以说干就干. 首先要知道websocket是基于http协议的,为什么这么说?因为从协议来说,websocket是借用了一部 ...

  10. zabbix模板

    https://github.com/xm-y/zabbix-community-repos  https://monitoringartist.github.io/zabbix-searcher/