题解:T103180 しろは的军训列队

solution:
按题目随便假设找到了一个x,它的位置的ap,属性bp
看下图
$$$$$$$$$$$$$$$$|||||P &&&&&&&&&&&&&&&
$:ap前,即ai<ap
&:ap后,即ai>ap
|:ap同,即ai==ap
显然要求解下面的式子
sigma 1~n (ai-x)*bi
前:(x-a1)*b1+(x-a2)*b2+(x-a3)*b3+......+(x-ap)*bp;
后:(ap+1-x)*bp+1+(ap+2-x)*bp+2+......+(an-x)*bn
展开:
前:b1x-a1b1+b2x-a2b2+b3x-a3b3+......+bpx-apbp
后:ap+1 * bp+1 - bp+1x + ap+2 * bp+2 - bp+2x +.....+ an*bn - bnx
合并:
(b1+b2+..+bp)x-(a1b1+a2b2+a3b3+...+apbp) (1)
(ap+1*bp+1+ap+2*bp+2+...+an*bn)-(bp+1*bp+2+...+bn)x (2)
答案S=(1)+(2)
为了使S最小
四个∑可以前缀后缀预处理O(1)查询
for循环用min确定要找的x就行了,也就是答案
显然数据并非有序,而我又有序的推证,所以要对数据排序
总最高复杂度就是排序nlogn
O(n(long+q) )q常数
#include<bits/stdc++.h>
using namespace std;
#define N 100010
#define int unsigned long long
int n;
struct node{
int a,b;
bool operator < (const node & x) const {
return a<x.a;
};
}sky[N];
int sum1[N],sum2[N];
main() {
cin>>n;
for(int i=1;i<=n;i++) scanf("%d",&sky[i].a);
for(int i=1;i<=n;i++) scanf("%d",&sky[i].b);
sort(sky+1,sky+1+n);
for(int i=1;i<=n;i++) sum1[i]=sky[i].b+sum1[i-1],sum2[i]=sum2[i-1]+sky[i].a*sky[i].b;
int ans=LLONG_MAX;
for(int i=1;i<=n;i++) {
int x=sky[i].a;
int temp=0;
temp=(sum1[i]-sum1[n]+sum1[i])*x;
temp+=(sum2[n]-sum2[i]-sum2[i]);
ans=min(ans,temp);
}
cout<<ans;
return 0;
}
题解:T103180 しろは的军训列队的更多相关文章
- 【BZOJ5319】军训列队(主席树)
[BZOJ5319]军训列队(主席树) 题面 BZOJ 洛谷 题解 一眼题既视感... 首先很明显,每次询问的结果显然是做一次离散. 然后直接上主席树就好了... 查询答案的方式也很简单 考虑一下那个 ...
- [JSOI2018]军训列队
[JSOI2018]军训列队 题目大意: \(n(n\le5\times10^5)\)个学生排成一排,第\(i\)个学生的位置为\(a_i\).\(m(m\le5\times10^5)\)次命令,每次 ...
- BZOJ5319: [Jsoi2018]军训列队
BZOJ5319: [Jsoi2018]军训列队 https://lydsy.com/JudgeOnline/problem.php?id=5319 分析: 易知把所有人按原本的顺序放到\([K,K+ ...
- BZOJ5319 & 洛谷4559 & LOJ2551:[JSOI2018]军训列队——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5319 https://www.luogu.org/problemnew/show/P4559 ht ...
- 洛谷 P4559: bzoj 5319: [JSOI2018]军训列队
题目传送门:洛谷 P4559. 题意简述: 有 \(n\) 个学生,编号为 \(i\) 的学生有一个位置 \(a_i\). 有 \(m\) 个询问,每次询问编号在 \([l,r]\) 区间内的学生跑到 ...
- BZOJ.5319.[JSOI2018]军训列队(主席树)
LOJ BZOJ 洛谷 看错了,果然不是\(ZJOI\)..\(jry\)给\(JSOI\)出这么水的题做T3么= = 感觉说的有点乱,不要看我写的惹=-= 对于询问\(l,r,k\),设\(t=r- ...
- bzoj 5319: [Jsoi2018]军训列队
Description Solution 最优情况可以是所有人按位置从小到大排序之后依次占到自己 \(K+\) 排名的位置上去 因为每一个休息位置不同,那么一定递增,所以一定存在一个分界点,左边的是往 ...
- JSOI2018 简要题解
潜入行动 复杂度分析题. 定义状态fi,j,0/1,0/1f_{i,j,0/1,0/1}fi,j,0/1,0/1表示以iii为根子树放jjj个机器iii这个放不放,iii这个是否已放来进行dpdpd ...
- JSOI2018R2题解
D1T1:潜入行动 裸的树上DP.f[i][j][0/1][0/1]表示以i为根的子树放j个设备,根有没有放,根有没有被子树监听,的方案数.转移显然. #include<cstdio> # ...
随机推荐
- React 中this.setStat是批量执行的, 它发现做三次是多余的,所以只执行一次
16==> this.setStat是批量执行的 它发现做三次是多余的,所以只执行一次 import React, { Component } from "react"; e ...
- 201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结
内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/ ...
- cartographer 3D运行录制rosbag包
目录: 1.运行多线激光雷达: 2.运行IMU: 3.录制rosbag包: 4.配置cartographer: 5.查看地图: 1.运行多线激光雷达: 主要是测试雷达是否正在运行,确认雷达点云topi ...
- Codeforces Round #594 (Div. 1) D. Catowice City 图论
D. Catowice City In the Catowice city next weekend the cat contest will be held. However, the jury m ...
- 通过组件实现相同group下字符串拼接
实现效果 组件处理流程如下: 1 使用Sorter组件对ColA进行排序 2 使用expression组件进行如下配置 3 使用aggregate组件进行如下配置 ColA ...
- Disruptor系列(三)— 组件原理
前言 前两篇文章都是从github wiki中翻译而来,旨在能够快速了解和上手使用Disruptor.但是为了能够掌握该技术的核心思想,停留在使用层面还远远不够,需要了解其设计思想,实现原理,故这篇从 ...
- 关于matlab2014a中生成dll文件,打包成com组件出现的问题和解决方法
问题1:matlab2014a破解不完整,容易导致package打包失败 解决方法:1.下载破解文档:链接: http://pan.baidu.com/s/1eRJ4E2I 密码: 44th 2.下载 ...
- Idea导出jar包运行报错:找不到主清单属性解决方法
解决方法 1.打开项目结构 2.创建一个Artifact 3.设置 我这里使用的maven,所以有resources文件夹 4.创建lib文件夹 右键output diretory,选择创建文件夹,名 ...
- Android Studio 提高开发效率的插件
好久没有更新博客了,最近搞个listview搞得半死不活的,心累~~ 今天带来的是Android Studio插件的整理,全是我已经安装使用的,写这篇博文的目的也是因为我怕我自己给忘记怎么用(尴尬) ...
- C#在循环中使用Random时生成的随机数相同的解决办法
场景 在循环中使用 Random y = new Random(); 生成随机数时每次循环生成的数是一样的. ; i < ;i++ ) { Random y = new Random(); Po ...