【BZOJ-28921171】强袭作战大sz的游戏 权值线段树+单调队列+标记永久化+DP...
2892: 强袭作战
Time Limit: 50 Sec Memory Limit: 512 MB
Submit: 45 Solved: 30
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 2 1
2 3 2
Sample Output
2
【数据规模和约定】
30%的数据满足N <=20000;
100%的数据满足2 <=N<= 2.5*10^5、0<=xi,yi,li<=2*10^9,1<=L<=2*10^9,xi<=yi.
HINT
Source
1171: 大sz的游戏
Time Limit: 50 Sec Memory Limit: 357 MB
Submit: 320 Solved: 98
[Submit][Status][Discuss]
Description
大sz最近在玩一个由星球大战改编的游戏。话说绝地武士当前共控制了N个星球。但是,西斯正在暗处悄悄地准备他们的复仇计划。绝地评议会也感觉到了这件事。于是,准备加派绝地武士到各星球防止西斯的突袭。一个星球受到攻击以后,会尽快通知到总基地。需要的时间越长的星球就需要越多绝地武士来防御。为了合理分配有限的武士,大sz需要你帮他求出每个星球各需要多少时间能够通知到总基地。由于某种原因,N个星球排成一条直线,编号1至N。其中总基地建在1号星球上。每个星球虽然都是绝地武士控制的,但是上面居住的生物不一定相同,并且科技水平也不一样。第i个星球能收到并分析波长在[xi, yi]之间的信号,并且也能够发出在这个区间的信号,但是不能发出其他任何波长的信号。由于技术原因,每个星球只能发信号到比自己编号小的距离不超过L的星球。特别地,强大的总基地可以接收任何波长的信号。每个星球处理接收到的数据需要1个单位时间,传输时间可以忽略不计。
Input
第一行两个正整数N、L。接下来N-1行,总共第i行包含了三个正整数xi、yi、li,其中li表示第i个星球距离1号星球li,满足li严格递增。
Output
总共N-1行,每行一个数分别表示2到N号星球至少需要多少单位时间,总基地能够处理好数据,如果无法传到总基地则输出-1。
Sample Input
3 1
1 2 1
2 3 2
input 2
3 3
1 2 1
2 3 2
Sample Output
1
2
output2
1
1
30%的数据满足N <=20000;
100%的数据满足2 <=N<= 2.5*10^5、0<=xi,yi,li<=2*10^9,1<=L<=2*10^9,xi<=yi.
HINT
Source
By 俞华程
Solution
线段树标记永久化+单调队列+DP
首先一眼DP: $dp[i]=min(dp[j])+1$ 其中 $\left | l[i]-l[j] \right |<L,\left [ x[i],y[i] \right ]\bigcap \left [ x[j],y[j] \right ]\neq \O $
那么需要优化复杂度,考虑利用数据结构(可以利用很多种,这里选用权值线段树+单调队列)
x[],y[]范围过大,单很稀疏,离散,建权值线段树,支持区间修改区间查询;维护区间中的答案,需要在区间中加入一个单调队列
发现标记不适合下传,即标记需要永久化,和之前维护直线的思想类似,这样复杂度就一样能保证在$O(nlogn)$
如果当前区间完全覆盖,则不需要下传;维护的最小值,即区间的单调队列队首,和左右区间的最小三者取最小
查询的时候查询有交集的所有区间,线段树中节点的信息只是维护了完全包含于这个区间的区间的信息,我们还需要知道和这个区间有交集的但不包含于这个区间的信息,所以往子树递归的时候把路径上的信息也一块统计就好啦。
总结:
1.标记永久化的思想更加加深
2.对于类似这样的单调的问题,同样可以用线段树去维护,据说类似问题线段树是比CDQ之类还要无敌的??
3.对于每个线段树区间套上单调队列时,容易爆,开始手写单调队列,炸编译,改成动态RE,所以可以考虑用<list>
Code
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #include<list> using namespace std; int read() {int x=0,f=1; char ch=getchar();while (ch<'0' || ch>'9') {if (ch=='-')f=-1; ch=getchar();}while (ch>='0' && ch<='9') {x=x*10+ch-'0'; ch=getchar();}return x*f; } #define maxn 250010 #define inf 0x7fffffff int N,L,tot,ls[maxn<<1],val[maxn<<4],dp[maxn],que[maxn],x[maxn],y[maxn],l[maxn]; struct DQueueNode{list<int>q;}Tree[maxn<<4]; int Get(int now) {return !Tree[now].q.empty()?dp[Tree[now].q.front()]:inf;} void update(int now,int l,int r) {val[now]=min(Get(now),(l==r)?inf:min(val[now<<1],val[now<<1|1]));} void Build(int now,int l,int r) {val[now]=inf;if (l==r) return;int mid=(l+r)>>1;Build(now<<1,l,mid); Build(now<<1|1,mid+1,r); } void Insert(int now,int l,int r,int L,int R,int x,int f) {if (L<=l && R>=r){if (f) while (!Tree[now].q.empty() && Tree[now].q.front()<=x) Tree[now].q.pop_front();else {while (!Tree[now].q.empty() && dp[Tree[now].q.back()]>=dp[x]) Tree[now].q.pop_back(); Tree[now].q.push_back(x);}update(now,l,r);return;}int mid=(l+r)>>1;if (L<=mid) Insert(now<<1,l,mid,L,R,x,f);if (R>mid) Insert(now<<1|1,mid+1,r,L,R,x,f);update(now,l,r); } int Query(int now,int l,int r,int L,int R) {if (L<=l && R>=r) return val[now];int mid=(l+r)>>1,re=Get(now);if (L<=mid) re=min(re,Query(now<<1,l,mid,L,R));if (R>mid) re=min(re,Query(now<<1|1,mid+1,r,L,R));return re; } int main() {N=read(),L=read();for (int i=1; i<=N-1; i++) ls[++tot]=x[i]=read(),ls[++tot]=y[i]=read(),l[i]=read();sort(ls+1,ls+tot+1);int Tot=1; for (int i=2; i<=tot; i++) if (ls[i]!=ls[i-1]) ls[++Tot]=ls[i];for (int i=1; i<=N-1; i++) x[i]=lower_bound(ls+1,ls+Tot+1,x[i])-ls,y[i]=lower_bound(ls+1,ls+Tot+1,y[i])-ls;Tot=unique(ls+1,ls+Tot+1)-ls-1; // for (int i=1; i<=N-1; i++) printf("%d %d\n",x[i],y[i]);Build(1,1,Tot);int he=-1,ta=-1; dp[0]=0; x[0]=1,y[0]=Tot; que[++ta]=0;Insert(1,1,Tot,x[0],y[0],0,0);for (int i=1; i<=N-1; i++){int tmp;while (he<ta && l[i]-l[que[he+1]]>L) tmp=que[++he],Insert(1,1,Tot,x[tmp],y[tmp],tmp,1);dp[i]=Query(1,1,Tot,x[i],y[i])+1;if (dp[i]!=inf+1) printf("%d\n",dp[i]),que[++ta]=i,Insert(1,1,Tot,x[i],y[i],i,0);else puts("-1");}return 0; }
转载于:https://www.cnblogs.com/DaD3zZ-Beyonder/p/5480630.html
【BZOJ-28921171】强袭作战大sz的游戏 权值线段树+单调队列+标记永久化+DP...相关推荐
- 树套树 ---- 树状数组套权值线段树模板题 P2617 Dynamic Rankings 动态第K大
题目链接 题目大意: 给你一个数组aaa,aaa有两个操作 询问aaa中[l,r][l,r][l,r]区间里面第kkk小的数是哪个? 修改axa_xax为yyy 解题思路: 首先我们知道权值线段树是 ...
- BZOJ 4605: 崂山白花蛇草水 树套树 权值线段树套kdtree
4605: 崂山白花蛇草水 Time Limit: 80 Sec Memory Limit: 512 MB Submit: 527 Solved: 153 [Submit][Status][Dis ...
- BZOJ 4605 崂山白花蛇草水(权值线段树+KD树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4605 [题目大意] 操作 1 x y k 表示在点(x,y)上放置k个物品, 操作 2 ...
- bzoj 4627: [BeiJing2016]回转寿司 -- 权值线段树
4627: [BeiJing2016]回转寿司 Time Limit: 10 Sec Memory Limit: 256 MB Description 酷爱日料的小Z经常光顾学校东门外的回转寿司店. ...
- BZOJ 3685 普通van Emde Boas树 权值线段树(zkw)
第一眼看到这题,没错就拿他来做treap的练手了,然而我错了,卡treap,我哭了,写了两三次treap(),这两天几乎都在写数据结构了.后来我又可耻地看了题解,原来这道题已经给了数列中数的范围,可以 ...
- bzoj 1503 (权值线段树)
由于蒟蒻实在是ttttttai 菜了,于是开始了学习主席树,权值线段树作为主席树的前置知识,于是蒟蒻各种百度百度,谷歌谷歌,抄网上的代码,然后终于A了这个题目.也还算是有一点收获. 题目:芝麻开门 题 ...
- BZOJ 4605 崂山白花蛇草水 权值线段树+K-D树
Description 神犇Aleph在SDOI Round2前立了一个flag:如果进了省队,就现场直播喝崂山白花蛇草水.凭借着神犇Aleph的实 力,他轻松地进了山东省省队,现在便是他履行诺言的时 ...
- bzoj 4627 回转寿司(权值线段树)
回转寿司 Description 酷爱日料的小Z经常光顾学校东门外的回转寿司店.在这里,一盘盘寿司通过传送带依次呈现在小Z眼前.不同的寿 司带给小Z的味觉感受是不一样的,我们定义小Z对每盘寿司都有一个 ...
- 深度学习 vs. 大数据:神经网络权值的版权属于谁?
深度学习 vs. 大数据:神经网络权值的版权属于谁? width="22" height="16" src="http://hits.sinaj ...
最新文章
- JZOJ 5452. 【NOIP2017提高A组冲刺11.5】轰炸
- Scala教程之:Either
- 湖南计算机专业专科排名2015,湖南最好的公办专科大学有哪些排名揭秘?湖南十大专科学校推荐?...
- 【leetcode 简单】 第一百一十题 分发饼干
- mysql 列换行 表设计 设计_今天来讲一下怎么利用MySql进行库表设计
- github 创建团队_如何为团队创建影响图
- 苹果手机如何降级系统
- Spring之AOP详解
- NB-IoT将给智能锁行业带来哪些影响?
- VisualStudio2013内置SQLServer入门(二)--增删改查
- 大数据信息安全需要准备哪些工具
- 浅复制和深复制的区别?//浅拷贝和深拷贝
- (Quicker动作)MathType公式快速标红
- Globle Get 多线程下载系统
- 计算机cpu风扇不转怎么办,如果计算机启动时cpu风扇不旋转,该怎么办?解决方法[详细说明]...
- TLD文件自定义标签
- 数据库——SQL语言建立供应商表S,零件表P,工程表J,供应表SPJ
- D3D9学习笔记之字体
- Java常见面试题(二)
- 如何处理“WLAN没有有效的IP配置”这一问题?
热门文章
- [洛谷]P2298 Mzc和男家丁的游戏 题解
- 鸿蒙系统怎么打开纯净模式,#手机[超话]##2021有点东西##OPP... - @安诺颜_ 的微博精选 - 微博国际站...
- 勇者斗恶龙(The Dragon of Loowater, UVa 11292)
- MSP-EXP430F5529LP_GPIO
- 使用NAT打造FTP服务新法
- 李兴华内部JAVA培训视频 (难找啊)
- PTA 数据结构与算法 7-29 修理牧场
- DOM对象之事件对象(Object《Event》)
- ubuntu appimage文件怎么安装_iOS 13描述文件怎么下载?iOS 13描述文件安装注意事项...
- PHPCMSV9 企业黄页 黄页企业模板添加方法