[loj3277]星座3
如果不合法,利用贪心发现当且仅当某两个星星所构成的矩形中没有白点
反过来,考虑留下若干个星星,那么即要求留下的星星两两之间满足:$\max_{x_{1}\le i\le x_{2}}a_{i}\ge \min(y_{1},y_{2})$
考虑笛卡尔树,那么在笛卡尔树上这等价于使得两点lca的高度大于等于两点最低高度,由于$a_{fa}\ge a_{k}$($fa$为$k$在lca上的父亲),因此这又等价于要求以$k$为根的子树中最多只能保留1个数比$a_{k}$大
令$f[i][j]$表示以$i$为根的子树中最高不超过为$j$且合法的最大保留的价值,其合法状态数量为不超过子树中点数量,因此启发式合并即可维护,时间复杂度为$o(n\log^{2}n)$

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 200005
4 #define ll long long
5 set<pair<ll,ll> >::iterator it;
6 set<pair<ll,ll> >s[N];
7 int n,m,x,y,z,a[N],st[N],ls[N],rs[N],f[N];
8 long long ans,mx[N],tag[N];
9 int find(int k){
10 if (k==f[k])return k;
11 return f[k]=find(f[k]);
12 }
13 void merge(int x,int y,int k){
14 x=find(x),y=find(y);
15 while ((s[y].size())&&((*s[y].begin()).first<=k)){
16 mx[y]=max(mx[y],(*s[y].begin()).second+tag[y]);
17 s[y].erase(s[y].begin());
18 }
19 if (s[x].size()<s[y].size()){
20 f[x]=y;
21 swap(x,y);
22 }
23 tag[x]+=mx[y];
24 tag[y]+=mx[x];
25 mx[x]+=mx[y];
26 for(it=s[y].begin();it!=s[y].end();it++)
27 s[x].insert(make_pair((*it).first,(*it).second+tag[y]-tag[x]));
28 }
29 void dfs(int k){
30 if (!k)return;
31 dfs(ls[k]);
32 dfs(rs[k]);
33 merge(k,ls[k],a[k]);
34 merge(k,rs[k],a[k]);
35 }
36 int main(){
37 scanf("%d",&n);
38 for(int i=1;i<=n;i++)scanf("%d",&a[i]);
39 for(int i=1;i<=n;i++)f[i]=i;
40 for(int i=1;i<=n;i++){
41 while ((st[0])&&(a[st[st[0]]]<a[i]))ls[i]=st[st[0]--];
42 if (st[0])rs[st[st[0]]]=i;
43 st[++st[0]]=i;
44 }
45 scanf("%d",&m);
46 for(int i=1;i<=m;i++){
47 scanf("%d%d%d",&x,&y,&z);
48 s[x].insert(make_pair(y,z));
49 ans+=z;
50 }
51 dfs(st[1]);
52 x=find(st[1]);
53 for(it=s[x].begin();it!=s[x].end();it++)mx[x]=max(mx[x],tag[x]+(*it).second);
54 printf("%lld",ans-mx[x]);
55 }
[loj3277]星座3的更多相关文章
- Excel通过身份证获取出生年月,性别,年龄,生肖,星座,省份等信息总结归纳
Excel通过身份证获取出生年月,性别,年龄,生肖,星座,省份等信息总结归纳 早期的身份证号码为15位数字,现在使用的身份证号码为18位数字,它们的含义如下:(1)15位:1-6位为地区代码,7-8位 ...
- JS星座判断(关于日期)
JS根据日期判断所属星座 效果如下: 完整代码如下: <!DOCTYPE html> <html > <head> <link rel="style ...
- 例题:输入您的出生日期,判断你的星座,主要练习使用datetime类及if else语句。很实用
while (true) { Console.WriteLine("请输入您的生日(年-月-日)");//提示输入 string x = Console.ReadLine();// ...
- C#实现万年历(农历、节气、节日、星座、属相、生肖、闰年等)
C# 万年历 农历 节气 节日 星座 星宿 属相 生肖 闰年月 时辰等,代码如下: using System.Collections.Generic; using System.Text; using ...
- java星座、年龄、日期等
星座: public static String getStar(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(dat ...
- PHP根据身份证号码验证、获取星座、生肖和性别函数
首先介绍一下身份证含义 新的18位身份证号码各位的含义:1-2位省.自治区.直辖市代码:3-4位地级市.盟.自治州代码:5-6位县.县级市.区代码:7-14位出生年月日,比如19670401代表196 ...
- 【Java】实现一个根据日期判断星座程序的编写
思路 直接根据月份做索引,然后根据日期边界判断是本月的星座还是上月的. 算法 private static String getAstro(int month, int day) { String[] ...
- IQ调制、整形滤波器与星座映射
http://www.cnblogs.com/touchblue/archive/2013/01/15/2861952.html 现代通信中.IQ调制基本上属于是标准配置,由于利用IQ调制能够做出全部 ...
- iOS根据获取的月和日星座名称
/** * 依据月和日的下标获取星座名 * * @param monthIndex 月的下标 * @param dayIndex 日的下标 * * @return 星座名 */ - (NSString ...
随机推荐
- TWAIN-v2.4-说明文档翻译(2)技术概览
技术概览 Technical Overview TWAIN架构(TWAIN Architecture) 数据交互的实现在TWAIN中由三类软件元素共同工作完成:应用程序(the application ...
- Spring Bean装配笔记
Spring Bean装配笔记 Spring中的Bean是一个很重要的概念.Spring作为一个Bean容器,它可以管理对象和对象之间的依赖关系,我们不需要自己建立对象,把这部分工作全部转交给容器完成 ...
- ApacheCon 首次亚洲大会火热来袭,SphereEx 邀您共赴年度盛会!
ApacheCon 是 Apache 软件基金会(ASF)的官方全球系列大会.作为久负盛名的开源盛宴,ApacheCon 在开源界备受关注,也是开源运动早期的知名活动之一. ApacheCon 每年举 ...
- asp.net core使用identity+jwt保护你的webapi(三)——refresh token
前言 上一篇已经介绍了identity的注册,登录,获取jwt token,本篇来完成refresh token. 开始 开始之前先说明一下为什么需要refresh token. 虽然jwt toke ...
- UE4蓝图AI角色制作(四)之Gameplay调试器
8. 寻路网格体和Gameplay调试器 为了及时识别出AI系统中的导航问题,UE4提供了一个工具用来解决这类问题,它叫Gameplay调试器.打开项目设置,在左侧找到"引擎",然 ...
- WinForm RichTextBox 常用操作
1.设置不自动选择字词 RichTextBox在选择文字的时候,如果没有关闭自动选择字词功能,我们有时候选择的时候会自动将光标前后的字或者词连接在一起进行选择. RichTextBox有属性AutoW ...
- FastAPI 学习之路(五十四)startup 和 shutdown
我们在实际的开发中呢,总会遇到这样的场景,我们想在启动或者终止的时候,做一些事情,那么应该如何实现呢,其实也是很简单.fastapi提供了这样的操作. 那么我们看下具体是怎么实现的呢 app = Fa ...
- Java版人脸检测详解下篇:编码
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Request failed with status code 500以及自引用循环Self referencing loop detected for property ‘xx‘ with type
错误Error: Request failed with status code 500 ,调试前端没问题,后端也没问题,还报错"连接超时" 在Network中找到错误Self r ...
- Spring Cloud Alibaba整合Sentinel
Spring Cloud Alibaba 整合 Sentinel 一.需求 二.实现步骤 1.下载 sentinel dashboard 2.服务提供者和消费者引入sentinel依赖 3.配置控制台 ...