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的平方外都有 ...
随机推荐
- Struts2_用Action的属性接收参数
先在 Action 中定义要接收的属性,需要编写属性的getter 和 setter 方法 struts2 会自动帮我们把 String 类型的参数转为 Action 中相对应的数据类型. priva ...
- Struts_ActionWildcard_通配符配置
使用通配符,将配置量降到最低 不过,一定要遵守“约定由于配置”的原则 struts2.xml <?xml version="1.0" encoding="UTF-8 ...
- Tomcat配置文件server.xml分析
本文力求,分析清楚 tomcat 的 server.xml 文件,逐步完善更新 常用来,配置tomcat启动,端口号:配置编码等. apache-tomcat-9.0.10/conf/server.x ...
- window下mycat要放在根目录下
原理文档没有跟我开玩笑呢? 建议放在盘符根目录下 ,无视的我,检查了多遍jdk环境,检查了多遍bat文件内容,仍然没有解决 找不到或无法加载主类 直到我乖乖的把目录放跟盘符才解决,心好累= =! 可能 ...
- 【[TJOI2017]DNA】
[题目][https://www.lydsy.com/JudgeOnline/problem.php?id=4892] 好像用\(SAM\)做的都是\(dfs\)啊 其实这里也是搜索 如果用\(SAM ...
- 【转】startActivityForResult和setResult详解
startActivityForResult与startActivity的不同之处在于:1.startActivity( ) 仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startAct ...
- 2017.11.27 用Servlet在JSP中加入验证码
登陆界面 <%@ page pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML ...
- border-radius给元素加圆角边框
border-radius给元素加圆角边框 例: border-radius:20px; /*所有角都使用半径为20px的圆角*/ 实心圆: 把宽度(width)与高度(height)值设置为一致(也 ...
- 利用python中的PIL进行矩阵与图像之间的转换
1.图像转换为矩阵 matrix = numpy.asarray(image) 2.矩阵转换为图像 image = Image.fromarray(matrix)
- google detection
paper: Scalable, High-Quality Object Detection ILSVRC14上,detection刷到55.7%的MAP,google插入的地方,别人倍感压力啊. 总 ...