2147: 07染色带谜题

时间限制: 1 Sec  内存限制: 128 MB
提交: 170  解决: 21
[提交][状态][讨论版][Edit] [TestData]

题目描述

现在给你一个长为N的染色带,有M种颜色,标号分别为0,1,2,…,M-1,染色带初始的颜色为标号0,现在对它进行K次操作,第i次操作,是对染色带的[Li,Ri]区间染上第Si种颜色(即把这段区间原来的颜色给覆盖掉),最后问你染色带进行这么多次操作后染色带上有几种颜色。

输入

输入包含多组数据,每组数据第一行包含3个正整数分别是N,M,K(0<N<=10000000,0<M<=10000,0<K<=10000),它们用空格隔开,接下来K行分别是3个整数Li ,Ri,Si,分别满足0<=Li <Ri<=N, 0<=Si<M。

输出

输出对于每组数据输出一个数字代表染色带上最后有几种颜色。

样例输入

2 2 0
2 2 1
0 2 1
3 3 3
0 2 1
1 3 2
2 3 0

样例输出

1
1
3

首先吐槽一下题目,第一句,应该是$n+1$长度的吧。。。直接上了个线段树区间覆盖,写完一直$WA$,对拍去了,发现标程是错的,数据也是错的。搞笑的是这题是$2014$年学校校赛的题目,当时数据就是错的,但是现场有人$AC$。。现在我把数据改正确了,历史翻案。

#include<map>
#include<set>
#include<ctime>
#include<cmath>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
using namespace std; int n,m,k;
int L[],R[],s[];
int p[],sz;
int t[],y[];
set<int>r; int get(int x)
{
int left =,right =sz,res;
while(left<=right)
{
int mid = (left + right)/;
if(p[mid]>x) right = mid-;
else if(p[mid]==x) res=mid,right = mid-;
else left = mid+;
}
return res;
} void pushDown(int rt)
{
if(t[rt]==-) return ;
t[*rt] = t[rt];
t[*rt+] = t[rt];
t[rt]=-;
} void update(int LL,int RR,int col,int l,int r,int rt)
{
if(LL<=l&&r<=RR)
{
t[rt]=col;
return ;
} int m = (l+r)/;
pushDown(rt);
if(LL<=m) update(LL,RR,col,l,m,*rt);
if(RR>m) update(LL,RR,col,m+,r,*rt+);
} void dfs(int l,int r,int rt)
{
if(l==r)
{
y[t[rt]]=;
return ;
}
int m = (l+r)/;
pushDown(rt);
dfs(l,m,*rt);
dfs(m+,r,*rt+);
} void build(int l,int r,int rt)
{
if(l==r)
{
t[rt]=;
return ;
} t[rt]=-;
int m = (l+r)/;
build(l,m,*rt);
build(m+,r,*rt+);
} int main()
{
//freopen("D:\\out.txt","w",stdout);
while(~scanf("%d%d%d",&n,&m,&k))
{
sz=;
memset(t,,sizeof t); memset(y,,sizeof y); r.clear(); for(int i=;i<=k;i++)
{
scanf("%d%d%d",&L[i],&R[i],&s[i]);
if(r.count(L[i])==) sz++, p[sz]=L[i] , r.insert(L[i]);
if(r.count(R[i])==) sz++, p[sz]=R[i] , r.insert(R[i]); if(r.count(L[i]-)==&&L[i]->=) sz++, p[sz]=L[i]- , r.insert(L[i]-);
if(r.count(L[i]+)==&&L[i]+<=n) sz++, p[sz]=L[i]+ , r.insert(L[i]+); if(r.count(R[i]-)==&&R[i]->=) sz++, p[sz]=R[i]- , r.insert(R[i]-);
if(r.count(R[i]+)==&&R[i]+<=n) sz++, p[sz]=R[i]+ , r.insert(R[i]+);
} if(r.count()==) sz++, p[sz]= , r.insert();
if(r.count(n)==) sz++, p[sz]=n , r.insert(n); sort(p+,p++sz); build(,sz,);
for(int i=;i<=k;i++) L[i] = get(L[i]), R[i] = get(R[i]);
for(int i=;i<=k;i++) update(L[i],R[i],s[i],,sz,); dfs(,sz,);
int ans=;
for(int i=;i<=;i++) ans=ans+y[i];
printf("%d\n",ans); }
return ;
}

ZUFEOJ 2147 07染色带谜题的更多相关文章

  1. BZOJ 2303 方格染色(带权并查集)

    要使得每个2*2的矩形有奇数个红色,如果我们把红色记为1,蓝色记为0,那么我们得到了这2*2的矩形里的数字异或和为1. 对于每个方格则有a(i,j)^a(i-1,j)^a(i,j-1)^a(i-1,j ...

  2. 和我一起打造个简单搜索之Logstash实时同步建立索引

    用过 Solr 的朋友都知道,Solr 可以直接在配置文件中配置数据库连接从而完成索引的同步创建,但是 ElasticSearch 本身并不具备这样的功能,那如何建立索引呢?方法其实很多,可以使用 J ...

  3. 2019.9.27PHP基础

    PHP 基础语法规范: 1 <?php 开头 ?>结尾 2 php可以单独存在也可以和html等结合使用 3后缀名一般以.php结尾 php4,php5,php6,php7,phtml. ...

  4. UVA - 10004 Bicoloring(判断二分图——交叉染色法 / 带权并查集)

    d.给定一个图,判断是不是二分图. s.可以交叉染色,就是二分图:否则,不是. 另外,此题中的图是强连通图,即任意两点可达,从而dfs方法从一个点出发就能遍历整个图了. 如果不能保证从一个点出发可以遍 ...

  5. 2021.07.17 P4170 染色(区间DP)

    2021.07.17 P4170 染色(区间DP) [P4170 CQOI2007]涂色 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.目标状态可以由哪些状态转移过来. ...

  6. 2021.07.17 P3177 树上染色(树形DP)

    2021.07.17 P3177 树上染色(树形DP) [P3177 HAOI2015]树上染色 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.dp思想是需要什么,维护 ...

  7. 2018.07.01 BZOJ3295: [Cqoi2011]动态逆序对(带修主席树)

    3295: [Cqoi2011]动态逆序对 **Time Limit: 10 Sec Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j& ...

  8. 2018.07.01洛谷P2617 Dynamic Rankings(带修主席树)

    P2617 Dynamic Rankings 题目描述 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i ...

  9. 解了这14道C语言谜题后,所有人都失声了!我来带你深入了解C!

    本文展示了14个C语言的迷题以及答案,代码应该是足够清楚的,而且有相当的一些例子可能是我们日常工作可能会见得到的.通过这些迷题,希望你能更了解C语言. 如果你不看答案,不知道是否有把握回答各个谜题?让 ...

随机推荐

  1. JS设计模式之装饰者模式

    装饰者模式概述 在不改变原对象的基础上,通过对其进行包装拓展(添加属性或者方法)使原有对象可以满足用户更复杂的需求 实际需求 在已有的代码基础上,为每个表单中的input默认输入框上边显示一行提示文案 ...

  2. 任务调度 Quartz 学习(三) CronTrigger 表达式

    CronTrigger CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表. CronT ...

  3. 上下文路径request.getContextPath();与${pageContext.request.contextPath}

    (1) request.getContextPath();与${pageContext.request.contextPath}都是获取上下文路径: 1. request.getContextPath ...

  4. eclipse如何远程debug/断开远程debug

    eclipse如何远程debug? 当你的代码已经部署到生产或者测试环境的时候,你如何debug判断线上的问题呢? debug之前必须保证本地代码和远程代码完全一致,否则将不能建立连接 在eclips ...

  5. Oracle数据库,忽略大小写Like模糊查询(SQL Server,MySql原理相同)

    背景 在使用Oracle或者其它数据库时,使用like 关键字进行模糊查询是大家经常使用的功能,在纯中文环境中使用非常好用,还有一些通配符可以使用,但是在纯英文环境中,会出现大小需要精确匹配的问题,主 ...

  6. MSSQL DBcheck

    --1.创建数据库. --create database MyDatabase; --删除数据库 --drop database MyDatabase; ----------------------- ...

  7. Gulp、Grunt构建工具

    在Gulp中创建一个库从磁盘gulp.src读取源文件并通过磁盘管道写回内容到gulp.dest,可以理解成只是将文件复制到另一个目录. var gulp = require('gulp'); gul ...

  8. Optimizing subroutine calls based on architecture level of called subroutine

    A technique is provided for generating stubs. A processing circuit receives a call to a called funct ...

  9. 一个文档让vim飞起来

    原文地址:http://www.cnblogs.com/songfy/p/5635757.html 引言 今天我们特地来讲讲这个vim的配置. vim这东西, 很多人装逼的时候经常会提到, 不过大部分 ...

  10. position:fixed部分版本的浏览器不支持

    ie6-ie8浏览器不支持这个属性 .fixed{         position:fixed; /*对于火狐等其他浏览器需要设置的*/         top:700px;  /*同上*/     ...