• 题目
  • 20
  • 40
  • 80
  • 100
    • 大致流程
    • code

题目

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

大概意思就是说把一些数分成若干段,每一段中的a[i]两两不能相同,代价为max(b[i])max(b[i]),求最小总代价。

20%

暴力乱搞。。。

40%

DP,设F[i]表示当前段结尾为i的最小代价和。
则可以从当前F[i]推向F[j],中途统计一下最大值再转移。

80%

用一个单调队列来存可能的每个转移位置,把其中位置靠前而且答案更不优的位置删除。
好吧这其实是水法但是我没打2333

100%

DP设F[i]表示当前段结尾为i的最小代价和(和40%一样)。
其中状态转移方程为
F[i]=F[j]+max(b[j+1]...b[i])(j=last...i−1)F[i]=F[j]+max(b[j+1]...b[i]) (j=last...i-1)
其中last表示最远的转移位置。
很显然从i往前的max(b[j+1]…b[i])一定是单调不降的。


阶梯表示max(b[j+1]…b[i])

每个圆圈的影响范围就是

(因为每个圈不会影响到自己,但是会影响到下一个圈)

所以可以用线段树维护F[i]+b[i]的最小值和F[i]的值,再用栈维护阶梯。

大致流程

比如要加入i+1个位置

那么就这样修改max(b[j])的值

然后统计min(F[j]+b[j])

再在线段树上修改F[i]的值

还有last的求法就自己脑补了啊2333

code

#include <iostream>
#include <cstdio>
#include <cstring>
#define fo(a,b,c) for (a=b; a<=c; a++)
#define fd(a,b,c) for (a=b; a>=c; a--)
#define Max_len 524288
using namespace std;
int a[100001];
int b[100001];
int f[100001];
int tr[Max_len][3];
int d[100001];
int num[100001];
int ls[100001];
int n,i,j,t,l,sum;int max(int x,int y)
{if (x>y)return x;elsereturn y;
}int min(int x,int y)
{if (x<y)return x;elsereturn y;
}void down(int t)
{if (tr[t][2]!=(-1)){tr[t*2][2]=tr[t][2];tr[t*2+1][2]=tr[t][2];tr[t][1]=tr[t][0]+tr[t][2];tr[t][2]=-1;}
}void change0(int t,int l,int r,int id,int s)
{if (l==r){tr[t][0]=s;return;}down(t*2);down(t*2+1);int mid=(l+r)/2;if (id<=mid)change0(t*2,l,mid,id,s);elsechange0(t*2+1,mid+1,r,id,s);tr[t][0]=min(tr[t*2][0],tr[t*2+1][0]);
}void change1(int t,int l,int r,int x,int y,int s)
{if (y<x)return;if (l<r){down(t*2);down(t*2+1);}if ((x<=l) && (r<=y)){tr[t][2]=s;down(t);return;}int mid=(l+r)/2;if (x<=mid)change1(t*2,l,mid,x,y,s);if (mid<y)change1(t*2+1,mid+1,r,x,y,s);tr[t][1]=min(tr[t*2][1],tr[t*2+1][1]);
}void find(int t,int l,int r,int x,int y)
{if (y<x)return;if (l<r){down(t*2);down(t*2+1);tr[t][1]=min(tr[t*2][1],tr[t*2+1][1]);}if ((x<=l) && (r<=y)){sum=min(sum,tr[t][1]);return;}int mid=(l+r)/2;if (x<=mid)find(t*2,l,mid,x,y);if (mid<y)find(t*2+1,mid+1,r,x,y);
}int main()
{  freopen("array.in","r",stdin);freopen("array.out","w",stdout);fo(i,1,Max_len-1)tr[i][0]=2000000000,tr[i][1]=2000000000;scanf("%d",&n);fo(i,1,n)scanf("%d%d",&a[i],&b[i]),ls[i]=num[a[i]],num[a[i]]=i;f[1]=b[1];t=1;d[0]=0;d[1]=1;l=0;change0(1,0,n,0,0);change0(1,0,n,1,f[1]);change1(1,0,n,0,1,b[1]);fo(i,2,n){l=max(l,ls[i]);//维护lastwhile ((t>0) && (b[d[t]]<=b[i]) && (d[t]>=l))t--;change1(1,0,n,d[t],i-1,b[i]);d[++t]=i;sum=233333333;find(1,0,n,l,i-1);f[i]=sum;change0(1,0,n,i,f[i]);}printf("%d\n",f[n]);
}

JZOJ4883. 【NOIP2016提高A组集训第12场11.10】灵知的太阳信仰相关推荐

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

    Description 在炽热的核熔炉中,居住着一位少女,名为灵乌路空. 据说,从来没有人敢踏入过那个熔炉,因为人们畏缩于空所持有的力量--核能. 核焰,可融真金. 咳咳. 每次核融的时候,空都会选取 ...

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

    题目描述 在炽热的核熔炉中,居住着一位少女,名为灵乌路空. 据说,从来没有人敢踏入过那个熔炉,因为人们畏缩于空所持有的力量--核能. 核焰,可融真金. 咳咳. 每次核融的时候,空都会选取一些原子,排成 ...

  3. jzoj 4883. 【NOIP2016提高A组集训第12场11.10】灵知的太阳信仰

    Description 在炽热的核熔炉中,居住着一位少女,名为灵乌路空. 据说,从来没有人敢踏入过那个熔炉,因为人们畏缩于空所持有的力量--核能. 核焰,可融真金. 咳咳. 每次核融的时候,空都会选取 ...

  4. 【NOIP2016提高A组集训第12场11.10】灵知的太阳信仰

    Description 在炽热的核熔炉中,居住着一位少女,名为灵乌路空. 据说,从来没有人敢踏入过那个熔炉,因为人们畏缩于空所持有的力量--核能. 核焰,可融真金. 咳咳. 每次核融的时候,空都会选取 ...

  5. 【JZOJ4884】【NOIP2016提高A组集训第12场11.10】图的半径

    题目描述 mhy12345学习了树的直径,于是开始研究图的半径,具体来说,我们需要在图中选定一个地方作为中心,其中这个中心有可能在路径上. 而这个中心的选址需要能够使得所有节点达到这个中心的最短路里面 ...

  6. 【JZOJ4861】【NOIP2016提高A组集训第7场11.4】推冰块

    题目描述 Dpstr最近迷上了推冰块.冰地是一个n行m列的网格区域,第i行第j列的格子记为(i,j),也就是左上角为(1,1),右下角为(n,m).每个格子可能是冰面.障碍物.减速带三者之一.其中,冰 ...

  7. 【JZOJ4896】【NOIP2016提高A组集训第16场11.15】兔子

    题目描述 在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝.更特殊地是,至多只有一个兔子窝有3条或更多的路径与它相连,其它的兔子窝只有1条或2条路径与其相连.换句话讲,这些兔子窝之 ...

  8. JZOJ4870. 【NOIP2016提高A组集训第9场11.7】涂色游戏

    Description Data Constraint Solution 我们设f[i][j]表示当前有i个格子恰好放了j种颜色的方案数,那么f[i][j]=f[i−1][j−1]∗(p−(j−1)) ...

  9. 【NOIP2016提高A组集训第7场11.4】推冰块

    Description Dpstr最近迷上了推冰块.冰地是一个n行m列的网格区域,第i行第j列的格子记为(i,j),也就是左上角为(1,1),右下角为(n,m).每个格子可能是冰面.障碍物.减速带三者 ...

最新文章

  1. boost::signals2::trackable相关的测试程序
  2. 全新章节抢先读 | 揭秘覆盖全端业务的文娱大前端技术
  3. p1044与p1898
  4. 安卓案例:利用帧动画实现游戏特效
  5. SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题(一)
  6. 语言写贪吃蛇墙角符号_从零基础到拥抱人工智能,您的孩子可能就差一个贪吃蛇游戏...
  7. 曙光中学2021年高考成绩查询,2021年自贡高考状元名单公布,自贡高考状元学校资料及最高分...
  8. 过滤程序的html代码,值得收藏的html过滤代码
  9. 御剑后台扫描工具下载
  10. 抖音超火的罗马时钟html代码,最近抖音上挺火的圆形文字时钟
  11. Ruby 核心技术与实战 36 讲
  12. HTML5期末大作业:网页设计——小米商城官网首页(1页) HTML+CSS+JavaScript web期末作业设计网页_清新淡雅个人网页大学生网页设计作业成品
  13. 好系统教你Win7系统开机启动慢怎么解决?
  14. 本科项目——51单片机多功能万年历
  15. 基于微信小程序的免费小说阅读平台小程序的设计与实现 毕业设计 毕设源码(1)小程序功能
  16. Poi的Excel的导入导出 支持2007
  17. 信捷PLc的C语言大小排序筛选,信捷PLC顺序控制怎么写
  18. 在html中frame标签的作用,HTML中的frame标签常见的6大属性,新手一定要悉知!
  19. mysql连接数据了的dep_MySQL数据库基础
  20. 2019天梯赛第四次训练赛

热门文章

  1. 通用贷款计算器js 计算方法
  2. 第三章:SQL——视图操作
  3. SUN开源基于TET的CTI和iSCSI测试工具
  4. 安装了迅雷却无法下载的解决方法
  5. 经典再读 | 认知控制和失匹配对N2成分的影响
  6. 如何用计算机打出下划线,哪位可以告诉我在电脑上怎么打下划线
  7. SpringBoot之加密
  8. Java 中tag配置文件中的标签属性意思
  9. 如何使用射手影音寻找字幕
  10. 谈一款MOBA类游戏《码神联盟》的服务端架构设计与实现 (转载)