蒟蒻的垂死挣扎
昨天咕咕咕了。。。什么鬼爬岳麓山?反正是累得一批。
这两天都做的一道题,真是坑死了。各种坑,spj啊,longdouble啊,yyb啊。。。。
行。小总结,今晚放假,不过大概不会断吧。
luogu P1912 [NOI2009]诗人小G
没想到yyb的第一道题就这么牛逼,贴总结了。
决策单调性
首先明确一点,如果i>j 则i的决策点一定大于等于j的决策点
那么我们考虑一个点怎么向后转移,我们可以二分找到当前点转移比以前所有点都更加优秀的一个后缀区间,为什么是后缀区间,因为如果x从i转移而来更优,则x以后的所有点从i转移一定更优。那么我们就能够确定这个i的影响范围了,经过一次次的不断更新,就能确认一个点的最优转移点。我们考虑用单调队列来维护这个更新,记录每个点的影响区间,每次先弹掉不合法区间以及一定不优的区间,然后我们二分到那个i点影响的后缀区间,修改上一位的区间右端点,并将当前区间加入队列。
>1e18问题
可以利用double类型的自带高精度来解决,但是会掉精度,所以开long double,最后转化为longlong输出即可。
题目不难,重在理解决策单调性的优化模式。
为什么说yyb坑,因为这货 define double long double. 我被这个卡了很久。
我待会儿再找他算账。 下面是代码。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmat