一段长度未知的线段。一种操作: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);elseif (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;elsemark[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;elsemark[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;elsemark[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;
}

转载于:https://www.cnblogs.com/clnchanpin/p/7343922.html

HDU 1199 amp;amp; ZOJ 2301 线段树离散化相关推荐

  1. poj2528贴海报(线段树离散化)

    //poj2528贴海报(线段树离散化) #include<cstring> #include<iostream> #include<cstdio> #includ ...

  2. 【POJ 2482】 Stars in Your Window(线段树+离散化+扫描线)

    [POJ 2482] Stars in Your Window(线段树+离散化+扫描线) Time Limit: 1000MS   Memory Limit: 65536K Total Submiss ...

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

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

  4. HDOJ 2492 Ping pong 线段树+离散化

    //2492 Ping pong 线段树+离散化 /* 题意: 有一陀人从左到右排成一排,每个人有一个唯一的技能值,每个人都找其他人比赛, 比赛前要再找一个人做裁判,裁判的技能值不能比这两个人都高,也 ...

  5. HDU - 1255 覆盖的面积(线段树求矩形面积交 扫描线+离散化)

    链接:线段树求矩形面积并 扫描线+离散化 1.给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 2.看完线段树求矩形面积并 的方法后,再看这题,求的是矩形面积交,类同. 求面积时,用被覆 ...

  6. HDU 1394 Minimum Inversion Number(线段树的单点更新)

    点我看题目 题意 :给你一个数列,a1,a2,a3,a4.......an,然后可以求出逆序数,再把a1放到an后,可以得到一个新的逆序数,再把a2放到a1后边,,,,,,,依次下去,输出最小的那个逆 ...

  7. hdu 5493 Queue(逆序对,线段树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5493 解题思路: 一道线段树的题目,因为是前面或者后面有k个比自己高的人,所以我们应该按照由身高从小到 ...

  8. 【HDU - 4217 】Data Structure? (线段树求第k小数)

    题干: Data structure is one of the basic skills for Computer Science students, which is a particular w ...

  9. HDU - 3564 Another LIS(LIS+线段树)

    http://acm.hdu.edu.cn/showproblem.php?pid=3564 题意 给出1~n的插入顺序,要求每次插入之后的LIS 分析 首先用线段树还原出最终序列.因为插入的顺序是按 ...

最新文章

  1. 任天堂经典游戏可以体感操作了,打开网页就能玩,击败泰森不是梦
  2. Web API Help Page Install WebApiTestClient 简单的测试客户端
  3. idea+maven+ssm搭建boot_crm项目遇到的问题
  4. [Error] iostream.h: No such file or directory的解决办法
  5. matlab动态图最新存储文件,MATLAB 动图绘制、保存
  6. Linux下samba服务搭建
  7. Cooliris – 优雅的照片浏览工具[iOS/Android]
  8. SpringContext扩展BeanFactory
  9. iis部署错误:HTTP 错误 500.21 - Internal Server Error
  10. Linux系统彻底卸载MySQL数据库
  11. ubuntu18.04安装monaco字体
  12. cad高程标注插件lisp_CADLISP程序,标高修改,管网标注,等一堆
  13. python模拟登录163邮箱_python selenium模拟登陆163邮箱。
  14. Docker学习(2)-Docker基础1
  15. java固定资产设备管理系统(源码开源分享)
  16. tx2 安装opencv4.1.1及opencv_contrib-4.1.1
  17. 一行命令统计出多个文件夹中的多种类型的代码行数
  18. excel写为字节流使用base64加解密
  19. {2018.5.7}荀(gou)彧(huo)同学的第二次考试小总结
  20. Jackson详细介绍

热门文章

  1. android nfc(一)
  2. IOS项目之弹出动画二
  3. T-SQL:流程控制 4,Case 语句
  4. 大牛推荐的15本学习数据分析挖掘的好书
  5. java数组的api_java程序员常用的11个API,赶紧收藏
  6. 根据类名遍历数组的三种方法
  7. mysql7种join连接_mysql 重新整理——七种连接join连接[六]
  8. Nacos如何避免并发读写冲突问题?
  9. HTTP_响应消息_响应头
  10. batocera_batocera系统如何把旧电脑改造成影音游戏主机