JZOJ4883. 【NOIP2016提高A组集训第12场11.10】灵知的太阳信仰 2017.10(B组)

来源:互联网 发布:js断点调试 编辑:程序博客网 时间:2024/05/16 02:36

Description

在炽热的核熔炉中,居住着一位少女,名为灵乌路空。
据说,从来没有人敢踏入过那个熔炉,因为人们畏缩于空所持有的力量——核能。
核焰,可融真金。

咳咳。
每次核融的时候,空都会选取一些原子,排成一列。然后,她会将原子序列分成一些段,并将每段进行一次核融。
一个原子有两个属性:质子数和中子数。
每一段需要满足以下条件:
1、同种元素会发生相互排斥,因此,同一段中不能存在两个质子数相同的原子。
2、核融时,空需要对一段原子加以防护,防护罩的数值等于这段中最大的中子数。换句话说,如果这段原子的中子数最大为x,那么空需要付出x的代价建立防护罩。求核融整个原子序列的最小代价和。

Input

第一行一个正整数N,表示原子的个数。
接下来N行,每行两个正整数pi和ni,表示第i个原子的质子数和中子数。

Output

输出一行一个整数,表示最小代价和。

Sample Input

5
3 11
2 13
1 12
2 9
3 13

Sample Output

26

Data Constraint

对于20%的数据,1<=n<=100
对于40%的数据,1<=n<=1000
对于100%的数据,1<=n<=10^5,1<=pi<=n,1<=ni<=2*10^4
想法:
设f[i]表示前i个数的最小代价
f[i]=min(f[j],max(b[j+1…i]))last[i]<=j<=i-1
last[i]表示从i往左走最远的合法位置,单调求
设s[i]表示i往左走第1个比b[j]比b[i]大的j,单调队列维护求即可
接下来用线段树维护几个值
ans:这个区间对答案的最小转移
mnf:这个区间最小的f值
tag:这个区间到i的max(b[j+1…i])值
先把f[i-1]+b[i]插入线段树中的第i个位置
,然后对于s[i]+1到i-1的,他们对答案的贡献=f值+b[i]
最后查询答案更新即可

阅读全文
0 0
原创粉丝点击