【题意】现在有几个球排成一排,编号从1开始,开始时所有球为黑色,现在有n(<=2000)次操作,每次操作将l[i]至r[i](均在int范围)的球凃成颜色c[i](黑色'b'或白色'w'),然后找到最长的连续白色球,输出左右端点符号

【离散化】因为l[i]和r[i]都在int范围,显然不不可以开一个2^31-1那么大的数组。将l[i]和r[i]+1离散化,再模拟染色即可。

如果你不知道离散化

将l[i]数组所有数与r[i]+1数组所有数取出来从小到大排序,做一个映射。

如样例

3

1 4 w

8 11 w

3 5 b

把1、5、8、12、3、6取出来,排序为1、3、5、6、8、12,离散化后

原数

1

3

5

6

8

12

离散化后

0

1

2

3

4

5

用mp[]做映射,类型为mp<int,int>。rev_mp[int]做逆向映射。

比如mp[4]=8,离散化后的4就可以看成数8,9,10,11的集合。如果离散化后的4被染成白色,那么相当于原数8,9,10,11均被染成白色。

再取样例中的一行: 1 4 w作为例子,这里1,4是原数,要从把球1,2,3,4均涂色,显然是凃离散化后0(1,2)和1(3,4)即可。

如果当初把r[i]做离散化而不是r[i]+1做离散化的话,r[i]就表示从它开始几个数的集合都被涂色,而不是从它结束涂色。

做好映射后,2^31-1个数就可以看成最多2*n个数,然后模拟染色即可。

这道题写的好晕啊,WA了5发后发现是多Case输入。。。

 #include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<stack>
#include<vector>
#include<queue>
#include<string>
#include<sstream>
#define eps 1e-9
#define FOR(i,j,k) for(int i=j;i<=k;i++)
#define MAXN 1005
#define MAXM 40005
#define INF 0x3fffffff
using namespace std;
typedef long long LL;
int i,j,k,n,m,x,y,T,ans,big,cas,num;
bool flag;
map <int , int> mp;
set <int> st; int l[],r[],rev_mp[];
char c[],color[];
int main()
{
while(~scanf("%d",&n))
{
st.clear();
mp.clear();
for (i=;i<=n;i++)
{
scanf("%d %d %c",&l[i],&r[i],&c[i]);
st.insert(l[i]);//现将其压入set中,也可以放入数组中最后排序
st.insert(r[i]+);
} num=;
for (set <int> ::iterator it=st.begin();it!=st.end();it++)//离散化
{
mp[*it]=num;//mp为map<int,int>类型,做一个映射,如上边的表格
rev_mp[num]=*it;//这是map的逆向映射。 num++;
} for (i=;i<num;i++) color[i]='b';//初始时为全部黑色 for (i=;i<=n;i++)//模拟涂刷过程
{
int left=mp[l[i]];
int right=mp[r[i]+];
for (j=left;j<right;j++)
{
color[j]=c[i];
}
} int pre=;
int left,right;
flag=false;
ans=;
for (i=;i<num;i++)//扫一遍寻找最长的连续白色球
{
if (color[i]!=color[i-])
{
if (color[i]=='w')
{
pre=i;//左端点
}else
if (color[i-]=='w' && ans < rev_mp[i] - rev_mp[pre] )
{
ans=rev_mp[i]-rev_mp[pre];//找到答案记录一下。
left=rev_mp[pre];
right=rev_mp[i]-;
flag=true;
}
}
}
if (!flag) printf("Oh, my god\n");else
printf("%d %d\n",left,right);
}
return ;
}

HDU 1199 - Color the Ball 离散化的更多相关文章

  1. hdu 1199 Color the Ball(离散化线段树)

    Color the Ball Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  2. ZOJ 2301 / HDU 1199 Color the Ball 离散化+线段树区间连续最大和

    题意:给你n个球排成一行,初始都为黑色,现在给一些操作(L,R,color),给[L,R]区间内的求染上颜色color,'w'为白,'b'为黑.问最后最长的白色区间的起点和终点的位置. 解法:先离散化 ...

  3. hdu 1199 Color the Ball

    http://acm.hdu.edu.cn/showproblem.php?pid=1199 Color the Ball Time Limit: 2000/1000 MS (Java/Others) ...

  4. hdu 1199 Color the Ball 离散线段树

    C - Color the Ball Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u ...

  5. hdu 1556:Color the ball(第二类树状数组 —— 区间更新,点求和)

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  6. hdu 1556:Color the ball(线段树,区间更新,经典题)

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  7. HDU.1556 Color the ball (线段树 区间更新 单点查询)

    HDU.1556 Color the ball (线段树 区间更新 单点查询) 题意分析 注意一下pushdown 和 pushup 模板类的题还真不能自己套啊,手写一遍才行 代码总览 #includ ...

  8. HDU 1556 Color the ball (数状数组)

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  9. 线段树(求单结点) hdu 1556 Color the ball

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

随机推荐

  1. Hive学习之六 《Hive进阶— —hive jdbc》 详解

    接Hive学习五 http://www.cnblogs.com/invban/p/5331159.html 一.配置环境变量 hive jdbc的开发,在开发环境中,配置Java环境变量 修改/etc ...

  2. SSM框架入门和搭建 十部曲

    又快到毕业设计的时候了,有的学弟说想用ssm做毕业设计,在网上找到资料看不懂,基础差.我就帮他写了一个demo,顺便也整理一下. SSM框架,顾名思义,就是Spring+SpringMVC+mybat ...

  3. 【转】POJ题目分类

    初级:基本算法:枚举:1753 2965贪心:1328 2109 2586构造:3295模拟:1068 2632 1573 2993 2996 图:最短路径:1860 3259 1062 2253 1 ...

  4. ubuntu用户及用户组文件信息

    1.用户帐号文件 /etc/passwd中存放当前系统的用户列表及用户基本的设置信息: 文件中每一行对应一个用户信息,用户信息用":"来分隔,各项内容含义如下: 用户名:用户密码: ...

  5. 模仿qq音乐播放字母效果

    html <div class="cont"> <ul class="cont_ul" id="cont_ul"> ...

  6. C#防SQL注入代码的实现方法

    对于网站的安全性,是每个网站开发者和运营者最关心的问题.网站一旦出现漏洞,那势必将造成很大的损失.为了提高网站的安全性,首先网站要防注入,最重要的是服务器的安全设施要做到位. 下面说下网站防注入的几点 ...

  7. win7 IIS7.0 【IIS 管理器无法验证此内置帐户是否有访问权】

    异常信息: 服务器配置为将传递身份验证和内置帐户一起使用,以访问指定的物理路径.但是,IIS 管理器无法验证此内置帐户是否有访问权.请确保应用程序池标识具有该物理路径的读取访问权.如果此服务器加入到域 ...

  8. 基于Redis的CAS服务端集群

    为了保证生产环境CAS(Central Authentication Service)认证服务的高可用,防止出现单点故障,我们需要对CAS Server进行集群部署. CAS的Ticket默认是以Ma ...

  9. C++ Primer chap7

    /* 第七章7.1: */ //#include<iostream> //#include<string> //using std::cin; //using std::cou ...

  10. JMS集群部署问题 java.net.ConnectException: Connection refused; No available router to destination

    1:本地spring配置如下 <!-- JndiTemplate --> <bean id="jndiTpl" class="org.springfra ...