一段长度未知的线段。一种操作:a b c ,表示区间[a,b]涂为颜色C,w代表白色,b代表黑色,问终于的最长连续白色段,输出起始位置和终止位置

离散化处理。和寻常的离散化不同,须要把点化成线段。左闭右开,即对于一段区间[a。b],转化成区间[a,b+1)

#include "stdio.h"
#include "string.h"
#include "algorithm"
using namespace std; struct node
{
int l,r,x;
}data[20010]; struct Mark
{
int l,r,op;
}mark[20010]; struct B
{
int id,x,dir;
}b[20010]; int color[20010]; bool cmp(B a,B b)
{
return a.x<b.x;
}
void build(int l,int r,int k)
{
int mid;
if (l>=r) return ; data[k].l=l;
data[k].r=r;
data[k].x=0;
if (l==r-1) return ; mid=(l+r)/2;
build(l,mid,k*2);
build(mid,r,k*2+1);
} void updata(int l,int r,int k,int op)
{
int mid;
if (l>=r) return ; if (data[k].l==l && data[k].r==r)
{
data[k].x=op;
return ;
} if (data[k].x!=-1 && data[k].x!=op)
{
data[k*2].x=data[k*2+1].x=data[k].x;
data[k].x=-1;
} mid=(data[k].l+data[k].r)/2; if (r<=mid)
updata(l,r,k*2,op);
else
if (l>=mid)
updata(l,r,k*2+1,op);
else
{
updata(l,mid,k*2,op);
updata(mid,r,k*2+1,op);
}
} void query(int k)
{
int i;
if (data[k].l>=data[k].r) return ;
if (data[k].x!=-1)
{
for (i=data[k].l;i<data[k].r;i++)
color[i]=data[k].x;
return ;
} query(k*2);
query(k*2+1);
}
int main()
{
int a[20010],n,cnt,m,ans,ans_l,ans_r,l,r,i;
char ch;
while (scanf("%d",&n)!=EOF)
{
cnt=0;
for (i=1;i<=n;i++)
{
scanf("%d%d %c",&l,&r,&ch);
if (ch=='w')
mark[i].op=1;
else
mark[i].op=0; b[cnt].x=l;
b[cnt].id=i;
b[cnt++].dir=-1; b[cnt].x=r+1;
b[cnt].id=i;
b[cnt++].dir=1;
}
sort(b,b+cnt,cmp);// 离散化辅助数组 m=1;
if(b[0].dir==-1)
mark[b[0].id].l=1;
else
mark[b[0].id].r=1;
a[1]=b[0].x; for (i=1;i<cnt;i++)
{
if (b[i].x!=b[i-1].x){ m++; a[m]=b[i].x;} // 将离散化之前的数从小到大存入a数组
if (b[i].dir==-1)
mark[b[i].id].l=m;
else
mark[b[i].id].r=m;
}
build(1,m,1); memset(color,0,sizeof(color)); // 记录叶子节点颜色
for (i=1;i<=n;i++)
updata(mark[i].l,mark[i].r,1,mark[i].op);
query(1); ans=0; for (i=1;i<=m;i++)
{
if (color[i]!=1) continue;
l=a[i];
while (color[i]==1) i++;
r=a[i]; if (r-l>ans)
{
ans=r-l;
ans_l=l;
ans_r=r;
}
}
if (ans==0) printf("Oh, my god\n");
else printf("%d %d\n",ans_l,ans_r-1);
}
return 0;
}

HDU 1199 &amp;&amp; ZOJ 2301 线段树离散化的更多相关文章

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

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

  2. ZOJ 3299 线段树 离散化

    本来是个很简单的题目,难住我的主要是这么几点 1.它所有的点都是坐标,不是实际的砖块,1,3指的是1-2 2-3的砖块...后来就是用1 代表1-2 ,2代表2-3.....,这样的话,每次读入的数据 ...

  3. hdu 1255 覆盖的面积(线段树 面积 交) (待整理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 Description 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积.   In ...

  4. hdu 5274 Dylans loves tree(LCA + 线段树)

    Dylans loves tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

  5. HDU 3074.Multiply game-区间乘法-线段树(单点更新、区间查询),上推标记取模

    Multiply game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  6. HDU 1394 Minimum Inversion Number(线段树求最小逆序数对)

    HDU 1394 Minimum Inversion Number(线段树求最小逆序数对) ACM 题目地址:HDU 1394 Minimum Inversion Number 题意:  给一个序列由 ...

  7. HDU5124:lines(线段树+离散化)或(离散化思想)

    http://acm.hdu.edu.cn/showproblem.php?pid=5124 Problem Description John has several lines. The lines ...

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

    Mayor's posters 转载自:http://blog.csdn.net/winddreams/article/details/38443761 [题目链接]Mayor's posters [ ...

  9. poj 2528 Mayor's posters(线段树+离散化)

    /* poj 2528 Mayor's posters 线段树 + 离散化 离散化的理解: 给你一系列的正整数, 例如 1, 4 , 100, 1000000000, 如果利用线段树求解的话,很明显 ...

随机推荐

  1. hdu 3864 素数分解

    题意:求n是否只有4个因子,如果是就输出除1外的所有因子. 模板题,就不排版了 #include<cstdio> #include<iostream> #include< ...

  2. mutiplemap 总结

    之前只是在C++ Primer里面看过关联容器,可能因为没有实际用过,只是看看,所以导致用的时候并不熟悉: 在这之前,map和set的特性应该要了解,map是关联数组,也就是由键值对组成的,而set只 ...

  3. PostgreSQL控制台以竖行显示

    \x select * from user; 这个和MySQL的有点区别,在查询之前使用\x进行显示的开启 注意:只需要用一次即可,以后的查询都是以竖行进行显示.

  4. CentOS 7修改网卡名为eth0

    第一步: 编辑文件加入如下所示参数 vi /etc/sysconfig/grub GRUB_CMDLINE_LINUX=”rd.lvm.lv=vg0/swap vconsole.keymap=us c ...

  5. matlab运行过程中出现找不到指定模块问题解决

    对于matlab08版本以前的解决方法: 修改改环境变量: 新建变量名:BLAS_VERSION 变量值:D:\matlab7\bin\win32\atlas_Athlon.dll 在你的安装文件夹里 ...

  6. 提交改动到 github 远程服务器,怎么跳过要求输入密码的步骤

    新机器上将工程改动提交到 github 服务器时,发现每次都要输入密码,这个有点儿小烦人,怎么解决这个问题呢? 首先,切换到工程根目录的 .git 隐藏目录,用 TextEdit 打开 config ...

  7. Latex Error cannot determine the size of graphic 报错的解决的方法

    Latex Error cannot determine the size of graphic 报错的解决的方法 插入jpg文件老是会报错... 追究了半天,原来是编译的命令又问题,不应该使用 la ...

  8. Bootstrap 3之美02-Grid简介和应用

    本篇主要包括: ■  Grid简介■  应用Grid■  Multiple Grids Grid简介 Bootstrap中,把页面分成12等份,这就是所谓的Grid. 在Bootstrap中,用类名控 ...

  9. restful api安全验证问题

    没有绝对的安全,这个话题很深, 下文都是自己的一些理解,水平有限,如有勘误,希望大家予以指正. 由于 RESTful Api 是基于 Http 协议的 Api,是无状态传输,所以 只要和用户身份有关的 ...

  10. 【java】关于Map的排序性的一次使用,有序的Map

    关于Map的排序性的一次使用,有序的Map >>>>> hashmap是按key的hash码排序的,而treemap是利用comparator 进行key的自然排序的 / ...