BZOJ 2907: 拜访神犇
设最优策略为第一步向左走
那么肯定是走到最左边最优
需要补一些步数
一种是最右边的连着选,多出一倍代价
一种是不连着选,多出两倍代价
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int cnt,n,lim,s,root,sz[10000005],a[1000005],ls[10000005],rs[10000005];
long long ans,tr[10000005];
void update(int x){
sz[x]=sz[ls[x]]+sz[rs[x]];
tr[x]=tr[ls[x]]+tr[rs[x]];
}
void insert(int &t,int l,int r,int x){
if (!t) t=++cnt;
if (l==r){
sz[t]++;
tr[t]+=x;
return;
}
int mid=(l+r)>>1;
if (x<=mid) insert(ls[t],l,mid,x);
else insert(rs[t],mid+1,r,x);
update(t);
}
long long query(int t,int l,int r,int x){
if (!x) return 0;
if (!t) return 0;
if (l==r) return 1ll*l*x;
int mid=(l+r)>>1;
if (sz[ls[t]]<=x) return query(rs[t],mid+1,r,x-sz[ls[t]])+tr[ls[t]];
else return query(ls[t],l,mid,x);
}
void solve(){
int Lim=lim;
if (Lim>n-2) return;
cnt=0;
root=0;
memset(ls,0,sizeof(ls));
memset(rs,0,sizeof(rs));
memset(tr,0,sizeof(tr));
memset(sz,0,sizeof(sz));
long long ANS=a[n]+a[s];
Lim-=s-1;
if (Lim<=0) ans=min(ans,ANS);
for (int i=s+1; i<n; i++){
insert(root,0,1e9,a[i+1]-a[i]);
long long ANS1=ANS+a[n]-a[i+1];
int l=Lim-(n-(i+1));
if (l>0) ANS1+=query(root,0,1e9,l)*2;
if (l>=0) ans=min(ans,ANS1);
}
}
int main(){
scanf("%d%d%d",&n,&lim,&s);
for (int i=1; i<=n; i++) scanf("%d",&a[i]);
ans=1ll<<60;
if (s!=n && n-2<lim || !lim || s==n && n-1<lim){
printf("-1\n");
return 0;
}
solve();
for (int i=1; i<=n/2; i++) swap(a[i],a[n-i+1]);
for (int i=n; i>=1; i--) a[i]=a[1]-a[i];
lim=n-lim-1;
s=n-s+1;
solve();
if (ans!=1ll<<60) printf("%lld\n",ans);
else printf("-1\n");
return 0;
}
/*
8 4 1
0 99 142 209 398 493 571 652 685
992 8 0 2
0 3 30 124 153 160 199 216 270
*/
BZOJ 2907: 拜访神犇的更多相关文章
- [BZOJ 4916]神犇和蒟蒻
Description 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; Input 请你读入一个整数N;1<=N<=1E9,A.B模1E9+7; Output 请你 ...
- 【刷题】BZOJ 4916 神犇和蒟蒻
Description 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; Input 请你读入一个整数N;1<=N<=1E9,A.B模1E9+7; Output 请你 ...
- 【BZOJ4916】神犇和蒟蒻(杜教筛)
[BZOJ4916]神犇和蒟蒻(杜教筛) 题面 BZOJ 求 \[\sum_{i=1}^n\mu(i^2)\ \ 和\ \sum_{i=1}^n\phi(i^2)\] 其中\[n<=10^9\] ...
- 洛谷 P2300 合并神犇 解题报告
P2300 合并神犇 题目背景 loidc来到了NOI的赛场上,他在那里看到了好多神犇. 题目描述 神犇们现在正排成一排在刷题.每个神犇都有一个能力值p[i].loidc认为坐在附近的金牌爷能力参差不 ...
- BZOJ4916: 神犇和蒟蒻【杜教筛】
Description 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; Input 请你读入一个整数N;1<=N<=1E9,A.B模1E9+7; Output 请你 ...
- 【BZOJ4916】神犇和蒟蒻 解题报告
[BZOJ4916]神犇和蒟蒻 Description 很久很久以前,有一群神犇叫sk和ypl和ssr和hjh和hgr和gjs和yay和xj和zwl和dcx和lyy和dtz和hy和xfz和myh和yw ...
- DP——P2300 合并神犇
题目背景 loidc来到了NOI的赛场上,他在那里看到了好多神犇. 题目描述 神犇们现在正排成一排在刷题.每个神犇都有一个能力值p[i].loidc认为坐在附近的金牌爷能力参差不齐非常难受.于是loi ...
- BZOJ4916 神犇和蒟蒻 【欧拉函数 + 杜教筛】
题目 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; 输入格式 请你读入一个整数N;1<=N<=1E9,A.B模1E9+7; 输出格式 请你输出一个整数A=\sum ...
- [BZOJ4916]神犇(Monster_Qi)和蒟蒻(SWHsz)
很久很久以前,有一只神犇叫Monster_Qi; 很久很久之后,有一只蒟蒻叫SWHsz; 1<=N<=1E9,A.B模1E9+7; 求这个. 求μ的话直接输出1就行了因为除了1的平方外都有 ...
随机推荐
- SharePoint 和 Windows Phone 7 开发人员培训资源
该工具包包括单位数目: Windows Phone 7 发展简介 在本单元中,您将了解真实的消费信息存储在 SharePoint 中与你用 Visual Studio 写 Windows Phone ...
- tcpdump确认服务器连接的交换机信息
Displaying CDP info via tcpdump or snoop Cisco Discovery Protocol is a management protocol that Cisc ...
- Vue.js-项目目录结构解析
1.Vue初始化项目目录如下: 2.目录各项含义如下:
- 使用SSH密钥方式登录ubuntu Linux,指令(ssh-keygen 和 ssh-copy-id)
实验目的 从myVM1(本地主机)上登录myVM2(远程主机).采用密钥方式,不输入密码. 测试环境 主机:window7 sp1 64位 专业版 虚拟机:VMware workstation 12 ...
- April 6 2017 Week 14 Thursday
If you smile when no one else is around, you really mean it. 独处时的微笑,才是发自内心的. Recently I found I seld ...
- ABI与编译器:ABI是由内核和工具链定义和实现的
http://book.51cto.com/art/201412/460857.htm <Linux系统编程(第2版)>第1章入门和基本概念,这一章着眼于Linux系统编程的基础概念并从程 ...
- 【CCPC-Wannafly Winter Camp Day3 (Div1) D】精简改良(状压DP)
点此看题面 大致题意: 给你一张图,定义\(dis(i,j)\)为\(i\)与\(j\)的最短距离,现要求删去若干条边,使得图仍然联通,且\(\sum_{i=1}^n\sum_{j=i+1}^ndis ...
- Math.random()随机生成x~y间的数字
JS如何随机产生数字呢?这就用到了Math.random()方法,它能够随机产生0~1间的数字,这个数可能为0,但会小于1. 那么,如果我想要大于等于1小于10之间的随机整数呢?需要分为以下几步: 1 ...
- matlab的figure窗口命名为中文
figure('NumberTitle', 'off', 'Name', '我的窗口名字');
- 共变导数(Covariant Derivative)
原文链接 导数是指某一点的导数表示了某点上指定函数的变化率. 比如,要确定某物体的速度在某时刻的加速度,就取时间轴上下一时刻的一个微小增量,然后考察速度的增量和时间增量的比值.如果这个比值比较大,说明 ...