博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj2528 Mayor's posters(线段树,离散化)
阅读量:2441 次
发布时间:2019-05-10

本文共 1123 字,大约阅读时间需要 3 分钟。

离散化的思想:
对于这样的数据
(3,10000),
(9,1000000),
(5,100000),
(1,1000),
(7,1000000)
我们可以将其处理为
(2,7),
(5,9),
(3,8),
(1,6),
(4,9)

我们再对离散化之后的数据进行处理就行了。
题目意思:

n(n<=10000)个人依次贴海报,给出每张海报所贴的范围li,ri(1<=li<=ri<=10000000)。

求出最后还能看见多少张海报。

参考代码:
#include 
#include
#include
#include
using namespace std;const int MAXN = 10000+5;struct Node{ int l,r; int c;}tree[14*MAXN]; //线段树struct Seg{ int l,r;}s[MAXN]; //存储报纸的范围struct Seg2{ int p; int index;}a[2*MAXN]; //存放端点信息bool cmp(Seg2 x,Seg2 y){ return x.p
=l && tree[node].r<=r){ tree[node].c=v; return; } if (tree[node].c>0){ tree[2*node].c=tree[2*node+1].c=tree[node].c; tree[node].c=0; } int mid=(tree[node].l+tree[node].r)/2; if (r<=mid) update(2*node,l,r,v); else if (mid
0){ if (color[tree[node].c]==0){ ans++; color[tree[node].c]++; } return; } if (tree[node].l==tree[node].r) return; count(2*node); count(2*node+1);}void solve(int n,int t){ build(1,1,t); //cout<<"--------"<
0) s[a[i].index].l=t; else s[-a[i].index].r=t; } /* for (int i=1;i<=n;i++){ printf("%d %d\n",s[i].l,s[i].r); } */ solve(n,t); } return 0;}
你可能感兴趣的文章
windows2000中的“秘密武器”(三)(转)
查看>>
Linux程序应用开发环境和工具经验谈(转)
查看>>
Linux办公一条龙之电子表格Calc(转)
查看>>
在NETBSD上配置ADSL+IPF+IPNAT(转)
查看>>
Windows 98 使用维护向导(转)
查看>>
用win2000收发传真(转)
查看>>
Linux办公一条龙之初识OpenOffice(转)
查看>>
Linux上安装GCC编译器过程(转)
查看>>
使用Windows XP 的任务计划(转)
查看>>
Linux分区工具的使用方法(转)
查看>>
深入理解硬盘的Linux分区(转)
查看>>
循序渐进教你LINUX之软件配置方法(转)
查看>>
NetBSD 指导手册(转)
查看>>
打造FreeBSD桌面系统(2)(转)
查看>>
为你的 Windows 98 加把锁(转)
查看>>
Windows 98 资源管理(转)
查看>>
认识 Windows 98 备份(转)
查看>>
Windows 98 禁止注册表检查器自动运行(转)
查看>>
Windows 98 注册表大修改(转)
查看>>
Windows 98 给回收站右键菜单增加重命名命令(转)
查看>>