AT_joisc2019_j 题解
先考虑这个式子:
\]
一定是在 \(C\) 有序时取到,具体证明很简单各位读者自己证明。
那么现在式子变成:
\]
这个时候一个常见的技巧是将 \(C\) 排序。
这个时候就可以定义状态:
\]
然后从贪心的思想出发,\(V\) 一定是选取区间 \([i,j]\) 中最大的 \(M\) 个。
令 \(f(i,j)\) 表示区间 \([i,j]\) 中前 \(M\) 大之和,有:
\]
考虑去掉一维状态:
\]
因为 \(f(i,j) + 2 \times C_{j}\) 满足四边形不等式,所以 \(dp_{i}\) 满足决策单调性,考虑分治优化,\(f(i,j)\) 可以直接用主席树求解。
那么我们就 \(O(n \log^2 n)\) 地做完了。
#include<bits/stdc++.h>
#define int long long
using namespace std;
//dp[l][r] 表示区间 [l,r] 内前 M 大
//求 max(dp[l][r])
//max_{r>l}(dp[l][r])
//设计状态 dp[i] 表示区间 [i,j] 前 M 大之和减去 2*(c[j]-c[i])
//dp[i]=max{f(i,j)-2*c[j]}+2*c[i]
const int maxn = 2e5+114;
const int top = 1e9+114;
const int inf = 2e18+114514;
int dp[maxn];
int n,m;
struct Node{
int sum,ls,rs;
int val;
}tr[maxn*35];
struct hhx{
int c,v;
}a[maxn];
int root[maxn],tot;
inline int kth(int lt,int rt,int L,int R,int k){
if(lt==rt){
return k*lt;
}
int mid=(lt+rt)>>1;
if((tr[tr[R].rs].sum-tr[tr[L].rs].sum)>=k){
return kth(mid+1,rt,tr[L].rs,tr[R].rs,k);
}
else{
return (tr[tr[R].rs].val-tr[tr[L].rs].val)+kth(lt,mid,tr[L].ls,tr[R].ls,k-(tr[tr[R].rs].sum-tr[tr[L].rs].sum));
}
}
inline void add(int cur,int lst,int lt,int rt,int pos){
tr[cur].sum=tr[lst].sum+1;
tr[cur].val=tr[lst].val+pos;
if(lt==rt){
return ;
}
int mid=(lt+rt)>>1;
if(pos<=mid){
tr[cur].rs=tr[lst].rs;
tr[cur].ls=++tot;
add(tr[cur].ls,tr[lst].ls,lt,mid,pos);
}
else{
tr[cur].ls=tr[lst].ls;
tr[cur].rs=++tot;
add(tr[cur].rs,tr[lst].rs,mid+1,rt,pos);
}
}
//前 k 大之和
void solve(int l,int r,int L,int R){
if(l>r) return ;
int mid=(l+r)>>1;
int mx=-inf,p=0;
for(int i=max(mid+m-1,L);i<=R;i++){
if(kth(1,top,root[mid-1],root[i],m)-2*a[i].c>mx){
mx=kth(1,top,root[mid-1],root[i],m)-2*a[i].c;
p=i;
}
}
dp[mid]=mx+2*a[mid].c;
solve(l,mid-1,L,p);
solve(mid+1,r,p,R);
}
bool cmp(hhx A,hhx B){
return A.c<B.c;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++) dp[i]=-inf;
for(int i=1;i<=n;i++) cin>>a[i].v>>a[i].c;
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
root[i]=++tot;
add(root[i],root[i-1],1,top,a[i].v);
}
solve(1,n-m+1,1,n);
int ans=-inf;
for(int i=1;i<=n;i++) ans=max(ans,dp[i]);
cout<<ans;
}
AT_joisc2019_j 题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
- JSOI2016R3 瞎BB题解
题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...
随机推荐
- deepin下的系统,如何为root用户添加密码
- cesium问题-关于不同时间模型亮度不一致问题
项目中遇到发布的bim模型在当天不同时间的模型亮度发生变化,尤其是晚上的时候会出现模型很暗.尴了个尬,一度怀疑是自己眼睛有问题,连续几天出现同样的情况,想到可能是时间问题导致的模型亮度不同,于是测试了 ...
- 推荐一款微信公众平台Python开发神器!
1.引言 在当今数字化时代,微信公众平台成为了企业和个人连接用户的重要渠道.为了高效地管理和与用户互动,开发者需要一个强大而灵活的工具. Weixin-Python 正是这样一个为微信公众平台量身打造 ...
- PageOffice既保存Word文件中指定区域的数据又保存整篇文件
一.首先在word文件中给需要在后台获取数据的区域设置以PO_开头的书签. 二.通过pageoffice在线打开文件并编辑保存.有两种打开文件的模式 1.普通编辑模式(docNormalEdit) 普 ...
- AIRIOT物联网平台助力油库自动化升级 实现业务场景全覆盖
随着我国石油工业的飞速发展,油库规模迅速扩大,油库系统逐渐完善起来.石油行业属于高风险行业,所以石油化工产品在储存.运输和生产各个环节,均有极高的安监.环保.应急的管理要求.通常情况下,油库容量. ...
- 化繁为简|AIRIOT智慧水务信息化建设解决方案
"生产自动化,管理信息化"是现代化水厂建设的目标之一,需要在水质要求.工艺.生产.管理.环境等监测方面达到精细化管理标准,这是一个高度智能化,实现化繁为简智慧进阶的工程.传统水 ...
- 【开源】2024最新python豆瓣电影数据爬虫+可视化分析项目
项目介绍 [开源]项目基于python+pandas+flask+mysql等技术实现豆瓣电影数据获取及可视化分析展示,觉得有用的朋友可以来个一键三连,感谢!!! 项目演示 [video(video- ...
- 添加身份认证和鉴权方案-使用jwtbearer
HTTP身份认证框架 RFC 7235 定义了一个 HTTP 身份验证框架,服务器可以用来质询(challenge)客户端的请求,客户端则可以提供身份验证凭据. 服务端开启了身份认证后.如果客户端访问 ...
- 制作SSL证书(签发免费证书)
制作SSL证书(签发免费证书) 下载证书生成器 wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 wget https://pkg.cfssl.org ...
- DRF之通过GenericAPIView的视图子类实现数据的增删改查接口
1.安装DRF pip install djangorestframework 2.将DRF注册到APP中 INSTALLED_APPS = [ 'django.contrib.admin', 'dj ...