ABC 158 F - Removing Robots dp 单调栈

LINK:Removing Robots

没想到 自闭。

考虑了一个容斥 发现不合法方案难以计算。

就算可以计算也几乎是n^2的做法。

考虑dp 左边会对右边产生影响 所以考虑先dp右边的再考虑左边的。

至于dp 自然是f[i]表示这个i~n这么多点的方案数。

设 i向右第一个影响不到的点为w 那么 有转移 f[i]+=f[i+1]+f[w].

这样从左到右dp就可以算出所有的方案了。

const ll MAXN=200010;
ll n,ans,top;
ll f[MAXN],g[MAXN],s[MAXN];
struct wy
{
	ll x,y;
	inline ll friend operator <(wy a,wy b){return a.x<b.x;}
}t[MAXN];
int main()
{
	freopen("1.in","r",stdin);
	get(n);
	rep(1,n,i)
	{
		ll get(x);ll get(y);
		t[i]=(wy){x,x+y-1};
	}
	sort(t+1,t+1+n);
	g[n+1]=1;
	fep(n,1,i)
	{
		f[i]=i;
		while(top&&t[i].y>=t[s[top]].x)
		{
			f[i]=max(f[i],f[s[top]]);
			--top;
		}
		s[++top]=i;
		g[i]=(g[i+1]+g[f[i]+1])%mod;
	}
	putl(g[1]);
	return 0;
}

原文地址:https://www.cnblogs.com/chdy/p/12687218.html

时间: 2024-08-29 23:22:42

ABC 158 F - Removing Robots dp 单调栈的相关文章

Atcoder ABC158 F - Removing Robots 线段树+选集合类dp

Atcoder ABC158 F - Removing Robots 线段树+dp 题意 一条直线上有机器人,每个机器人有一个激活后行进值D[i],当激活它时,它就会向x轴方向走D[i]距离.进行后它就会离开坐标轴.激活有两种方式,一种是手动激活,一种是当一个机器人在激活状态时的行进距离[x[i],x[i]+D[i])注意右开区间,碰到了别的机器人,那个被碰的机器人就会被激活.同时它如果碰到了别的也会激活别的,连锁反应.问你可以任意选择任意个机器人激活,激活后剩余机器人的集合有多少种 思路 这种

CDOJ 1132 酱神赏花 dp+单调栈降低复杂度+滚动数组

酱神赏花 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 262143/262143KB (Java/Others) Submit Status 酱神去杭州赏花. 花展在一条街道上举行,这条街道上有一共有n个节点,自左而右从11到nn编号,11号和nn号是左右两个端点,两个相邻端点之间的距离为11.本次花展一共要展出mm朵花,在第titi时刻,有一朵颜值为bibi的花将在第aiai个节点展出,如果酱神在titi时刻处于第xx个节点,

【DP/单调栈】关于单调栈的一些题目(codevs 1159,codevs 2673)

题目描述 Description 这个月的pku月赛某陈没有参加,因为当时学校在考试[某陈经常逃课,但某陈还没有强大到考试也可以逃掉的程度].何况,对于北大校赛,水牛通常是没有什么希望考得好的[事实上某陈最好成绩是仅A了一道题]. 某陈郁闷.接下来他又将沉浸在无穷尽的刷题中,每天面对各种颜色的Status--WA,TLE,RE,甚至还有MLE,CE,PE什么什么的,他无比期待蓝色的AC. 话说RP爆发的某陈弄到了很久以后某次pku月赛的某题的题目和输入数据,如下所示. 输入数据包括n个测试点,每

G - Most Dangerous Shark dp 单调栈 单调队列

题意: 一条线段上有n张骨牌(n=1e7), 相邻骨牌距离为1,每张骨牌有其高度和推倒的花费,问最少的花费推倒所有的骨牌. 题解: 首先用单调栈维护每个位置往左(右)推能推倒的最远的骨牌 dp[i]表示1-i倒下的最小花费 转移显然只有两种  一种是第i张往左推动 另一种是找到往右推动能推倒i的最小花费的地方进行转移  这里可以用单调栈维护最小值 #include<bits/stdc++.h> using namespace std; typedef long long ll; const i

bzoj1057: [ZJOI2007]棋盘制作 [dp][单调栈]

Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源 于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳.而我们的主人公小Q, 正是国际象棋的狂热爱好者.作为一个顶尖高手,他已不满足于普通的棋盘与规则,于是他跟他的好朋友小W决定 将棋盘扩大以适应他们的新规则.小Q找到了一张由N*M个正方形的格子组成的矩形纸片,每个格子被涂有黑白两种 颜色之一.小Q想在这种纸中裁减一部分作为新棋盘,当然,他希望这个

小结:单调栈 &amp; 单调队列

概要: 对于维护信息具有单调性的性质或者问题可以转化为具有单调性质的模型的题,我们可以考虑用单调栈或单调队列. 技巧及注意: 技巧很多,只要能将问题转化为单调性问题,就好解决了. 当维护固定长度的单调区间,我们考虑用单调队列,如[BZOJ]3314: [Usaco2013 Nov]Crowded Cows(单调队列) 单调栈维护长度时要进行及时更新,例如:[BZOJ]3039: 玉蟾宫(DP/单调栈) 假设完美状态后再进行减法原理,例如:[BZOJ]1628 && 1683: [Usaco

csp-s模拟测试50(9.22)「施工(单调栈优化DP)」&#183;「蔬菜(二维莫队???)」&#183;「联盟(树上直径)」

改了两天,终于将T1,T3毒瘤题改完了... T1 施工(单调栈优化DP) 考场上只想到了n*hmaxn*hmaxn的DP,用线段树优化一下变成n*hmaxn*log但显然不是正解 正解是很**的单调栈 可以想象到最优情况一定是将两端高于中间的一段平原填成一段平的坑,不然如果坑内存在高度差那么我们即使只将一部分抬升也肯定没有用处,并且如果中间的坑已经高于了两端,再向上升也肯定不优,然后就中间的坑可以很很小,也可以很长,对于这个模型我们首先想到n^2*h的DP 设当前表示的f[i]表示当前到了i节

POJ 2559 Largest Rectangle in a Histogram (单调栈或者dp)

Largest Rectangle in a Histogram Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15831   Accepted: 5121 Description A histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rectangles have equal wi

【AtCoder】ARC067 F - Yakiniku Restaurants 单调栈+矩阵差分

[题目]F - Yakiniku Restaurants [题意]给定n和m,有n个饭店和m张票,给出Ai表示从饭店i到i+1的距离,给出矩阵B(i,j)表示在第i家饭店使用票j的收益,求任选起点和终点的最大(收益-代价).n<=5000,m<=200. [算法]单调栈+矩阵差分 [题解]直接枚举区间,很难同时计算m张票,我们反过来考虑每个B(i,j)的贡献. 对于B(i,j),令x为满足x<i,B(x,j)>B(i,j)的最大的x,令y为满足y>i,B(y,j)>B(