Color the Ball


Time Limit: 2 Seconds      Memory Limit: 65536 KB

There are infinite balls in a line (numbered 1 2 3 ....), and initially all of them are paint black. Now Jim use a brush paint the balls, every time give two integers a b and follow by a char 'w' or 'b', 'w' denotes the ball from a to b are painted white, 'b' denotes that be painted black. You are ask to find the longest white ball sequence.

Input

First line is an integer N (<=2000), the times Jim paint, next N line contain a b c, c can be 'w' and 'b'.

There are multiple cases, process to the end of file.

Output

Two integers the left end of the longest white ball sequence and
the right end of longest white ball sequence (If more than one output
the small number one). All the input are less than 2^31-1. If no such
sequence exists, output "Oh, my god".

Sample Input

3
1 4 w
8 11 w
3 5 b

Sample Output

8 11

解题思路:n未知,因此离散化好处理,线段树的区间更新

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <ctime>
#include <map>
#include <set>
using namespace std;
#define lowbit(x) (x&(-x))
#define max(x,y) (x>y?x:y)
#define min(x,y) (x<y?x:y)
#define MAX 100000000000000000
#define MOD 1000000007
#define pi acos(-1.0)
#define ei exp(1)
#define PI 3.141592653589793238462
#define INF 0x3f3f3f3f3f
#define mem(a) (memset(a,0,sizeof(a)))
typedef long long ll;
const int maxn=;
struct node
{
int l,r,co;
}tree[maxn*];
int n,cnt,tot;
int num[maxn],ha[maxn],color[maxn],co[maxn],li[maxn],ri[maxn];
int find(int x)
{
int l=,r=cnt;
while(l<=r)
{
int mid=(l+r)>>;
if(ha[mid]==x) return mid;
else if(ha[mid]<x) l=mid+;
else r=mid-;
}
return -;
}
void build(int l,int r,int root)
{
tree[root].l=l,tree[root].r=r,tree[root].co=;
if(l==r) return ;
int mid=(l+r)>>;
build(l,mid,root<<);
build(mid+,r,root<<|);
}
void update(int l,int r,int root,int val)
{
if(tree[root].l==l && tree[root].r==r)
{
tree[root].co=val;
return;
}
if(tree[root].co==val) return;
if(tree[root].co!=-)
{
tree[root<<].co=tree[root<<|].co=tree[root].co;
tree[root].co=-;
}
if(r<=tree[root<<].r) update(l,r,root<<,val);
else if(l>=tree[root<<|].l)update(l,r,root<<|,val);
else update(l,tree[root<<].r,root<<,val),update(tree[root<<|].l,r,root<<|,val);
}
void query(int l,int r,int root)
{
if(tree[root].co!=-)
{
for(int i=tree[root].l;i<=tree[root].r;i++)
color[i]=tree[root].co;
return;
}
if(r<=tree[root<<].r) query(l,r,root<<);
else if(l>=tree[root<<|].l) query(l,r,root<<|);
else query(l,tree[root<<].r,root<<),query(tree[root<<|].l,r,root<<|); }
int main(int argc,char *argv[])
{
char s[];
while(scanf("%d",&n)!=EOF)
{
tot=;
memset(color,,sizeof(color));
for(int i=;i<n;i++)
{
scanf("%d%d%s",&li[i],&ri[i],s);
co[i]=s[]=='b'?:;
num[tot++]=li[i];
num[tot++]=ri[i];
}
sort(num,num+tot);
int t=tot;
for(int i=;i<t;i++)
{
if(num[i]-num[i-]>) num[tot++]=num[i-]+;
if(num[i]-num[i-]>) num[tot++]=num[i]-;
}
sort(num,num+tot);
cnt=;
ha[++cnt]=num[];
for(int i=;i<tot;i++)
if(num[i-]!=num[i]) ha[++cnt]=num[i];
build(,maxn,);
for(int i=;i<n;i++)
{
int a=find(li[i]);
int b=find(ri[i]);
update(a,b,,co[i]);
}
query(,maxn,);
int s,e,ans=,i=,j;
while(i<=cnt)
{
if(color[i]==)
{
j=i;
while(color[j]== && j<=cnt) j++;
int t=ha[j-]-ha[i]+;
if(t>ans)
{
ans=t;
s=ha[i];
e=ha[j-];
}
i=j;
}
else i++;
}
if(!ans) printf("Oh,my god\n");
else printf("%d %d\n",s,e);
}
return ;
}

ZOJ 2301 Color the Ball 线段树(区间更新+离散化)的更多相关文章

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

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

  2. HDU 1556 Color the ball(线段树区间更新)

    Color the ball 我真的该认真的复习一下以前没懂的知识了,今天看了一下线段树,以前只会用模板,现在看懂了之后,发现还有这么多巧妙的地方,好厉害啊 所以就应该尽量搞懂 弄明白每个知识点 [题 ...

  3. Color the ball 线段树 区间更新但点查询

    #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #inclu ...

  4. hdu 1556 Color the ball 线段树 区间更新

    水一下 #include <bits/stdc++.h> #define lson l, m, rt<<1 #define rson m+1, r, rt<<1|1 ...

  5. POJ-2528 Mayor's posters (线段树区间更新+离散化)

    题目分析:线段树区间更新+离散化 代码如下: # include<iostream> # include<cstdio> # include<queue> # in ...

  6. hdu1556Color the ball线段树区间更新

    题目链接 线段树区间更新更新一段区间,在更新区间的过程中,区间被分成几段,每一段的左右界限刚好是一个节点的tree[node].left和tree[node].right(如果不是继续分,直到是为止) ...

  7. POJ-2528 Mayor's posters(线段树区间更新+离散化)

    http://poj.org/problem?id=2528 https://www.luogu.org/problem/UVA10587 Description The citizens of By ...

  8. POJ 2528 Mayor's posters (线段树区间更新+离散化)

    题目链接:http://poj.org/problem?id=2528 给你n块木板,每块木板有起始和终点,按顺序放置,问最终能看到几块木板. 很明显的线段树区间更新问题,每次放置木板就更新区间里的值 ...

  9. POJ2528:Mayor's posters(线段树区间更新+离散化)

    Description The citizens of Bytetown, AB, could not stand that the candidates in the mayoral electio ...

随机推荐

  1. hdu 1423 最长公共递增子序列 LCIS

    最长公共上升子序列(LCIS)的O(n^2)算法 预备知识:动态规划的基本思想,LCS,LIS. 问题:字符串a,字符串b,求a和b的LCIS(最长公共上升子序列). 首先我们可以看到,这个问题具有相 ...

  2. Android ImageView设置图片原理(下)

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 写完上一篇后,总认为介绍的知识点不多,仅仅是一种在UI线程解析载入图片.两种在子线程解析,在UI线程 ...

  3. java枚举在android项目应用

    今天修复一个公司非常早曾经的android应用功能,里面的代码逻辑已经全然错乱,然后发现返回的数据全然不正确了.然后修复了整整两天.然后我又一次整理了一遍,重构就算不上了. 然后就用上了枚举. 什么是 ...

  4. bzoj 2120 数颜色 题解

    转载请注明:http://blog.csdn.net/jiangshibiao/article/details/23990489 [原题] 2120: 数颜色 Time Limit: 6 Sec  M ...

  5. js 判断对touch事件支持

    $.support = (function() { var support = { touch: !!(('ontouchstart' in window) || window.DocumentTou ...

  6. Mysql数据库常规操作(建表、查询)

    一.表单操作 1-1.创建表 create table tb_name( id in primary key auto_increment);    1-2.查看表 desc table_name; ...

  7. oracle基础入门(一)

    一:Oracle的安装     我所知的Oracle的数据库有 10g,11g, 12g, 我们常用的是10g ,因为10g有scott的用户,而11和12现在还没有(哪位大神看到有问题可以指出哦), ...

  8. 【Codeforces Round #424 (Div. 2) C】Jury Marks

    [Link]:http://codeforces.com/contest/831/problem/C [Description] 有一个人参加一个比赛; 他一开始有一个初始分数x; 有k个评委要依次对 ...

  9. centos下安装redis/mysql等基础环境

    1.修改语言 阿里云的ECS默认语言是:en_US.UTF-8,需要改成zh_CN.UTF-8 修改方法:vim /etc/locale.conf,然后重启. 查看方法:echo $LANG 2.安装 ...

  10. [Javascript] this in Function Calls

    In most cases, the value of a function's this argument is determined by how the function is called. ...