题意:给定$a_{1\cdots n},b_{1\cdots n}$,询问是给定$l,r$,找出$a',b'$使得$\sum\limits_{i=l}^r\max(\left|a'-a_i\right|,\left|b'-b_i\right|)$最小

很妙的转化...

$\max(\left|a_1-a_2\right|,\left|b_1-b_2\right|)=\max(a_1-a_2,a_2-a_1,b_1-b_2,b_2-b_1)$

令$x_1=\frac{a_1+b_1}2,y_1=\frac{a_1-b_1}2$,类似定义$x_2,y_2$,原式变为

$\begin{aligned}\max(x_1+y_1-x_2-y_2,x_2+y_2-x_1-y_1,x_1-y_1-x_2+y_2,x_2-y_2-x_1+y_1)&=\max(x_1-x_2,x_2-x_1)+\max(y_1-y_2,y_2-y_1)\\&=\left|x_1-x_2\right|+\left|y_1-y_2\right|\end{aligned}$

我们现在要找到$x',y'$使得$\sum\limits_{i=l}^r\left|x'-x_i\right|+\left|y'-y_i\right|$最小,拆开之后就变成两个区间中位数,此时可以用可持久化线段树解决

#include<stdio.h>
#include<algorithm>
using namespace std;
typedef long long ll;
struct seg{int l,r,c;ll s;
}t[4000010];
int r1[100010],r2[100010],v[200010],M,N;
void modify(int pr,int&nr,int p,int v,int l,int r){nr=++M;t[nr]=t[pr];t[nr].s+=v;t[nr].c++;if(l==r)return;int mid=(l+r)>>1;if(p<=mid)modify(t[pr].l,t[nr].l,p,v,l,mid);elsemodify(t[pr].r,t[nr].r,p,v,mid+1,r);
}
ll d,res;
void query(int pr,int nr,int k,int l,int r){if(l==r){d=v[l];return;}int mid=(l+r)>>1,lc,rc;ll ls,rs;lc=t[t[nr].l].c-t[t[pr].l].c;rc=t[t[nr].r].c-t[t[pr].r].c;ls=t[t[nr].l].s-t[t[pr].l].s;rs=t[t[nr].r].s-t[t[pr].r].s;if(k<=lc){query(t[pr].l,t[nr].l,k,l,mid);res+=rs-rc*d;}else{query(t[pr].r,t[nr].r,k-lc,mid+1,r);res+=d*lc-ls;}
}
int a[100010],b[100010];
int main(){int n,m,i,x,y;scanf("%d%d",&n,&m);for(i=1;i<=n;i++)scanf("%d",a+i);for(i=1;i<=n;i++)scanf("%d",b+i);for(i=1;i<=n;i++){v[++N]=a[i]+b[i];v[++N]=a[i]-b[i];}sort(v+1,v+N+1);N=unique(v+1,v+N+1)-v-1;for(i=1;i<=n;i++){modify(r1[i-1],r1[i],lower_bound(v+1,v+N+1,a[i]+b[i])-v,a[i]+b[i],1,N);modify(r2[i-1],r2[i],lower_bound(v+1,v+N+1,a[i]-b[i])-v,a[i]-b[i],1,N);}while(m--){scanf("%d%d",&x,&y);res=0;query(r1[x-1],r1[y],(y-x)/2+1,1,N);query(r2[x-1],r2[y],(y-x)/2+1,1,N);printf("%lld.%d0\n",res/2,res&1?5:0);}
}

转载于:https://www.cnblogs.com/jefflyy/p/9734245.html

[xsy1144]选物品相关推荐

  1. POJ 1293 - Duty Free Shop 01背包记录所选物品

    裸的01背包.dp[x]只要是bool型记录当前空间是否可用.. 而为了找到用了哪些物品..dp[x]设置为int型..进行记录.. Program: #include<iostream> ...

  2. 已选商品数量总计如何实现_英国VAT新政临近,没有API如何添加或修改税率?教程来了!...

    2020已临近尾声,这意味着英国脱欧后的VAT新政也离我们越来越近. 此前,我们发布?<关于修改英国站刊登,以展示准确物品价格的通知>,提醒卖家从2021年1月1日开始,eBay将根据英国 ...

  3. random_state的值如何选_算法萌新如何学好动态规划(3)

    本文是「动态规划」系列文章的第三篇,作为 算法萌新如何学好动态规划(2) 的一个延伸.本篇文章将主要聚焦于动态规划经典模型 -- 背包问题的讲解. 背包问题属于线性 DP 模型,之所以单独拎出来讲,主 ...

  4. JavaScript实现全选/全不选操作

    效果示例 默认状态下: 勾选全选时: 任意取消勾选物品A/物品B/物品C时 实现代码 <!DOCTYPE html> <html><head><meta ch ...

  5. 0x52. 动态规划 - 背包(习题详解 × 19)

    目录 0x52. 动态规划 - 背包 0x52.1 0/10/10/1 背包 Problem A. 数字组合 Problem B. 背包问题求具体方案 Problem C. jury Compromi ...

  6. CF3B Lorry (手动模拟01背包,贪心)难度⭐⭐⭐

    这道题洛谷上的翻译是错的,最后输出格式那里应该是输出一行所选物品的编号,中间用空格隔开 手动模拟01背包 这道题看上去很像是01背包的模板题,但是很明显,v=1e9,正常的01背包是肯定会爆掉62MB ...

  7. 【每日DP】day4 P1417 烹调方案(奇怪的01背包增加了)难度⭐⭐⭐

    P1417 烹调方案 每件物品只有一个,很明显是01背包,但是价值的转换方式不同,是要求 ai−t∗bia_i-t*b_iai​−t∗bi​ 尽可能最大.普通的01背包的价值是不变的,而这一道题目中的 ...

  8. 【BZOJ】3771: Triple FTT+生成函数

    [题意]给定n个物品,价值为$a_i$,物品价格互不相同,求选一个或两个或三个的价值为x的方案数,输出所有存在的x和对应方案数.$ai<=40000$. [算法]生成函数+FFT [题解]要求价 ...

  9. 背包问题九讲 v1.0

    背包问题九讲 v1.0 目录 第一讲 01背包问题 第二讲 完全背包问题 第三讲 多重背包问题 第四讲 混合三种背包问题 第五讲 二维费用的背包问题 第六讲 分组的背包问题 第七讲 有依赖的背包问题 ...

最新文章

  1. Kafka:消息是如何在服务端存储与读取的,你真的知道吗?
  2. echarts在360中以及IE8浏览器不兼容:解决方案
  3. 倒排索引优化 - 跳表求交集 空间换时间 贪心
  4. 判断一个数是否是回文数
  5. .net函数查询_特来电智能分析平台动态查询架构创新实践
  6. 2012.2.18-silverlight设计器崩溃
  7. 科技部:基础研究十年行动方案将制定,支持冷门学科等发展
  8. 和大家探讨一下“虚拟光驱”原理
  9. 详解MathType中如何插入特殊符号
  10. PHP学习总结(9)——PHP入门篇之WAMPServer服务控制面板介绍
  11. echarts时间散点图_ECharts 实现地图散点图(下)
  12. iOS应用日志:开始编写日志组件与异常日志
  13. 多目标布谷鸟(MOCS)优化算法附Matlab代码
  14. 如何高效阅读英文数据手册?
  15. STM32F103ZET6+IIC+SHT20温湿度传感
  16. 关于大学生睡眠时间的调查
  17. 二维码门禁(ssm做后台)
  18. 蜜蜂遗传学在社会传播中塑造肠道微生物群的菌株结构
  19. html5 羽毛球,当上班族和羽毛球碰撞到一起,这样的生活才是标配
  20. 【简书交友】阿群1986: 一个专注于修电脑做系统的青岛小哥

热门文章

  1. 深入理解C#的装箱和拆箱
  2. webpack4.x中使用postcss-loader、autoprefixer给CSS属性自动添加前缀
  3. uva-10341-二分法
  4. Cap22_信息系统安全管理
  5. R语言之数据处理常用包
  6. spring-boot-starter家族成员简介
  7. Fiddler使用AutoResponder进行本地文件和线上文件的映射
  8. This project needs to migrate WTP metadata
  9. 原创(网络克隆 )视频教程
  10. 解决Android编译so库出错问题