博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2528 Mayor's posters (线段树+区间覆盖+离散化)
阅读量:5902 次
发布时间:2019-06-19

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

题意: 一共有n张海报, 按次序贴在墙上, 后贴的海报可以覆盖先贴的海报, 问一共有多少种海报出现过。

题解: 因为长度最大可以达到1e7, 但是最多只有2e4的区间个数,并且最后只是统计能看见的不同海报的数目,所以可以先对区间进行离散化再进行区间覆盖的操作。

由于墙上不贴东西的时候对后面没有影响, 所以可以不建树, 直接memset一下就好了。

因为是区域覆盖的问题, 树上原来的点并不会对后面的结果产生影响, 所以可以只修改lazy标记而不对树进行修改。

最后再用建树的操作访问一下lazy标记 并记录答案就好了。

代码

 
1 #include
2 #include
3 #include
4 using namespace std; 5 #define lson l,m,rt<<1 6 #define rson m+1,r,rt<<1|1 7 #define fi first 8 #define se second 9 const int N = 20000+5;10 int tree[N<<2], lazy[N<<2];11 int a[N];12 bool vis[N];13 int ans, n, t;14 pair
P[N];15 16 void Pushdown(int rt)17 {18 if(lazy[rt])19 {20 lazy[rt<<1|1] = lazy[rt<<1] = lazy[rt];21 lazy[rt] = 0;22 }23 }24 void Revise(int L, int R, int C ,int l, int r, int rt)25 {26 if(L <= l && r <= R)27 {28 lazy[rt] = C;29 return ;30 }31 Pushdown(rt);32 int m = l+r >> 1;33 if(L <= m) Revise(L,R,C,lson);34 if(m < R) Revise(L,R,C,rson);35 }36 void build(int l, int r, int rt)37 {38 if(lazy[rt])39 {40 if(!vis[lazy[rt]])41 {42 vis[lazy[rt]] = 1;43 ans++;44 }45 return ;46 } 48 int m = l+r >> 1;49 build(lson);50 build(rson);51 }52 int main()53 {54 ios::sync_with_stdio(false);55 cin.tie(0);56 cout.tie(0);57 cin >> t;58 while(t--)59 {60 ans = 0;61 cin >> n;62 for(int i = 1; i <= 2*n; i++)63 {64 cin >> a[i];65 P[i].fi = a[i], P[i].se = i;66 }67 sort(P+1,P+2*n+1);68 int last = 0, cnt = 0;69 for(int i = 1; i <= 2*n; i++) //离散化操作70 {71 if(P[i].fi == last)72 a[P[i].se] = cnt;73 else a[P[i].se] = ++cnt, last = P[i].fi;74 }75 memset(lazy, 0, sizeof(lazy));76 for(int i = 1; i <= 2*n; i+=2)77 Revise(a[i],a[i+1],(i+1)/2,1,cnt,1);//由于每次的海报不同所以直接给海报一个编号78 memset(vis, 0, sizeof(vis));79 build(1,cnt,1);80 cout << ans << endl;81 }82 return 0;83 }

转载于:https://www.cnblogs.com/MingSD/p/8385801.html

你可能感兴趣的文章
通过案例学调优之--AWR BaseLine管理
查看>>
如何使用MySQL提升权限
查看>>
keepalived 原理,安装,配置
查看>>
乐在其中设计模式(C#) - 单例模式(Singleton Pattern)
查看>>
Tensorflow官方语音识别入门教程 | 附Google新语音指令数据集
查看>>
AssetBundle进阶内存优化(Unity 4.x)
查看>>
Windows Home Server 简体中文版安装和配置体验 - 海量图鉴
查看>>
GitHub 版本控制 项目托管 00 总体框架
查看>>
Silverlight & Blend动画设计系列五:故事板(StoryBoards)和动画(Animations)
查看>>
Windows 8部署系列PART3:配置WDS服务器环境
查看>>
Ruby中写一个判断成绩分类的脚本
查看>>
《从零开始学Swift》学习笔记(Day 40)——析构函数
查看>>
Exchange2003-2010迁移系列之十,Exchange证书攻略
查看>>
使用NTFS权限保护数据安全
查看>>
infortrend ESDS RAID6故障后的数据恢复方案
查看>>
【STM32 .Net MF开发板学习-23】DHT11温湿度传感器通信(下)
查看>>
extmail集群的邮件负载均衡方案 [lvs dns postfix]
查看>>
SCCM2012SP1---资产管理和远程管理
查看>>
Android Activity 之 startActivityForResult 的使用
查看>>
org.springframework.util 类 Assert的使用
查看>>