如果不合法,利用贪心发现当且仅当某两个星星所构成的矩形中没有白点

反过来,考虑留下若干个星星,那么即要求留下的星星两两之间满足:$\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的更多相关文章

  1. Excel通过身份证获取出生年月,性别,年龄,生肖,星座,省份等信息总结归纳

    Excel通过身份证获取出生年月,性别,年龄,生肖,星座,省份等信息总结归纳 早期的身份证号码为15位数字,现在使用的身份证号码为18位数字,它们的含义如下:(1)15位:1-6位为地区代码,7-8位 ...

  2. JS星座判断(关于日期)

    JS根据日期判断所属星座 效果如下: 完整代码如下: <!DOCTYPE html> <html > <head> <link rel="style ...

  3. 例题:输入您的出生日期,判断你的星座,主要练习使用datetime类及if else语句。很实用

    while (true) { Console.WriteLine("请输入您的生日(年-月-日)");//提示输入 string x = Console.ReadLine();// ...

  4. C#实现万年历(农历、节气、节日、星座、属相、生肖、闰年等)

    C# 万年历 农历 节气 节日 星座 星宿 属相 生肖 闰年月 时辰等,代码如下: using System.Collections.Generic; using System.Text; using ...

  5. java星座、年龄、日期等

    星座: public static String getStar(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(dat ...

  6. PHP根据身份证号码验证、获取星座、生肖和性别函数

    首先介绍一下身份证含义 新的18位身份证号码各位的含义:1-2位省.自治区.直辖市代码:3-4位地级市.盟.自治州代码:5-6位县.县级市.区代码:7-14位出生年月日,比如19670401代表196 ...

  7. 【Java】实现一个根据日期判断星座程序的编写

    思路 直接根据月份做索引,然后根据日期边界判断是本月的星座还是上月的. 算法 private static String getAstro(int month, int day) { String[] ...

  8. IQ调制、整形滤波器与星座映射

    http://www.cnblogs.com/touchblue/archive/2013/01/15/2861952.html 现代通信中.IQ调制基本上属于是标准配置,由于利用IQ调制能够做出全部 ...

  9. iOS根据获取的月和日星座名称

    /** * 依据月和日的下标获取星座名 * * @param monthIndex 月的下标 * @param dayIndex 日的下标 * * @return 星座名 */ - (NSString ...

随机推荐

  1. 从源码分析node-gyp指定node库文件下载地址

    当我们安装node的C/C++原生模块时,涉及到使用node-gyp对C/C++原生模块的编译工作(configure.build).这个过程,需要nodejs的头文件以及静态库参与(后续称库文件)对 ...

  2. Java基础之(五):数据类型

    Java快捷键 首先我们先来介绍下IDEA的一些快捷键 psvm=public static void main(String[] args) {} sout=System.out.println(& ...

  3. hdu4479 (数学题)(算术基本定理)

    题目大意 给定一个三元组\((x,y,z)\)的\(gcd\)和\(lcm\),求可能的三元组的数量是多少,其中三元组是的具有顺序的 其中\(gcd\)和\(lcm\)都是32位整数范围之内 由算术基 ...

  4. SpringBoot-自动装配2

    配置文件到底能写什么?怎么写? SpringBoot官方文档中有大量的配置,直接去记忆的话,好像不是我们程序员的行事风格! 分析自动配置原理 能自动配置的组件一般都有命名为下面规则的两个类: xxxx ...

  5. Java泛型背后是什么?

    文Java中泛型的应用,让大家更好地理解泛型,以及常说的泛型类型擦除是什么概念,举一个简单的例子,如下: 这里可以看出来在代码编写阶段就已经报错了,不能往string类型的集合中添加int类型的数据. ...

  6. javascript-jquery的ajax

    用一个例子来说明: html部分  <form action="name1"> <input class="class1" type=&quo ...

  7. Scrum Meeting 14

    第14次例会报告 日期:2021年06月07日 会议主要内容概述: 汇报了已完成的工作,明确了下一步目标,正在努力赶进度. 一.进度情况 我们采用日报的形式记录每个人的具体进度,链接Home · Wi ...

  8. 热身训练1 Calculator

    题目出处:Calculator 简要题意: 你有一个确定的函数,f(x)=+...*...^...,其中共有n个操作,从左到右依次计算. 共有m次询问,我们每次询问,1.会修改f(x)中的操作:2.输 ...

  9. 洛谷 P5657 [CSP-S2019] 格雷码

    链接: P5657 分析: 签到题,不过也有不少细节. 数据范围需要开 unsigned long long ,前年也有很多人因此丢了5分. pow 会出现神必错误,需要手写一个 mpow 函数. 算 ...

  10. 2021 CCPC女生赛

    newbie,A了五题铜牌收工 比赛时和队友悠哉游哉做题,想着干饭,最后幸好没滚出铜尾. 贴一下比赛过的代码 A题 签到 队友A的,判断正反方向序列是否符合要求 /*** * @Author: _Kr ...