USACO26 moofest 奶牛集会(归并排序)
听说这题也是bzoj的3378&&poj1990,然而没有权限号交不了。。poj懒得登。
题意:有n个奶牛,他们相互发出max(a[i].v,a[j].v)*abs(a[i].p-a[j].p)的声音,求这个的和。
绝望,刷这题的时候本来傻逼想%题解的,结果网上的都是树状数组,唯一找到的一个归并排序还TMD是错的。。吃鲸,没办法,只好自己做。
不难发现(如果你%过其他题解),这里v要的是最大值,那我们就用大的将比他小的全部乘起来,那具体在归并排序里面怎么实现呢,我们先按位置从大到小快排,然后大到小归并排序v的大小(这两个排序反过来也行,不过就要自己推公式了),当a[i].v>a[j].v时,说明j~r所有的v,都要比a[i].v小,那就加上a[i].v*sigema(k=j~r)(a[k].p-a[i].p),同理当a[i].v<a[j].v时,a[i].v*sigema(k=i~mid)(a[i].p-a[k].p),a[i].p的个数是确定的,我们只需要预处理一下另外一项就行了。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long LL; struct node {int v,p; }a[21000],t[21000]; bool cmp(node n1,node n2) {if(n1.p>n2.p)return true;return false; } LL ans; void mergesort(int l,int r) {if(l==r)return ;int mid=(l+r)/2;mergesort(l,mid);mergesort(mid+1,r);LL suml=0,sumr=0;for(int i=l;i<=mid;i++)suml+=a[i].p;for(int i=mid+1;i<=r;i++)sumr+=a[i].p;int i=l,j=mid+1,p=l; while(i<=mid&&j<=r){if(a[i].v>a[j].v){ans+=a[i].v*((r-j+1)*a[i].p-sumr);suml-=a[i].p;t[p++]=a[i++];}else {ans+=a[j].v*(suml-(mid-i+1)*a[j].p);sumr-=a[j].p;t[p++]=a[j++];}}while(i<=mid)t[p++]=a[i++];while(j<=r)t[p++]=a[j++];for(int i=l;i<=r;i++)a[i]=t[i]; } int main() {freopen("moofest.in","r",stdin);freopen("moofest.out","w",stdout);int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d%d",&a[i].v,&a[i].p);sort(a+1,a+n+1,cmp);ans=0;mergesort(1,n);printf("%lld\n",ans);return 0; }
转载于:https://www.cnblogs.com/AKCqhzdy/p/7684961.html
USACO26 moofest 奶牛集会(归并排序)相关推荐
- USACO 2004 MooFest 奶牛集会
题目 问题描述 约翰的n 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在一起,第i 头奶牛的坐 ...
- 洛谷 P2345 奶牛集会 解题报告
P2345 奶牛集会 题目背景 MooFest, 2004 Open 题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨 ...
- usaco 奶牛集会 奶牛抗议
奶牛集会 Description 约翰家的N头奶牛每年都会参加"哞哞大会" .哞哞大会是世界奶牛界的盛事.集会上 的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.当然,哞哞大叫肯 ...
- luogu P2345 奶牛集会
二次联通门 : luogu P2345 奶牛集会 /*luogu P2345 奶牛集会权值线段树以坐标为下标, 坐标为值建立线段树 对奶牛按听力由小到大排序对于要查的牛 每次第i次放入奶牛起作用的v就 ...
- P2345 奶牛集会(树状数组or模拟)
题目背景 MooFest, 2004 Open 题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅栏,摸牛仔的屁股等等 ...
- 读数据优化 绝对值函数优化 加速 示范程序 洛谷P2345奶牛集会
# pragma G++ optimize "O3"//一号加速 #include<cstdio> #include<cctype> #include< ...
- P2345 奶牛集会(树状数组/CDQ分治)
题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在一起,第i 头奶牛的坐标为X ...
- P2345 奶牛集会
题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在一起,第i 头奶牛的坐标为X ...
- P2345 奶牛集会/P2657 低头一族
luogu 传送门 双倍经验! 树状数组题 v[i]只有当和比它小的v[j]一起运算时才对答案有贡献. 我们可以这样来处理,离线来做.将所有奶牛按照v升序排序,然后一个奶牛一个奶牛的查询,再插入. 我 ...
- noip2017考前整理(未完)
快考试了,把我以前写过的题回顾一下. Noip2007 树网的核:floyd,推出性质,暴力. Noip2008 笨小猴:模拟 Noip2008 火柴棒等式:枚举 Noip2008 传纸条:棋盘dp ...
最新文章
- gps两点距离 php,PHP应用:PHP计算百度地图两个GPS坐标之间距离的方法
- 电路交换-报文交换-分组交换- 分组交换包括:虚电路和数据报
- 合格SEOER应该具备的能力
- 管理系统制作的python代码_python学生管理系统代码实现
- Linux crontab下关于使用date命令和sudo命令的坑
- rpm打包的流程包括以下哪些_品牌策划的流程包括哪些?
- jq事件不自执行方法
- 右键打开方式添加应用程序无法设置
- 越来越难?这届开发者学不会的计算机理论
- High performance find query using lean() in mongoose
- 解决vue axios跨域请求发送两次问题
- 未知宽高div水平垂直居中的3种方法
- usionCharts 技术文档-Jsp画图
- [转] ubuntu开启SSH服务
- 新建word文件时出现页眉横线
- C语言-学习笔记完整版
- 央视记者点赞京东物流 仓库分拣员变身时尚白领管理300个机器人
- WinHex(16进制编辑器)
- 【利用Altium Designer2018设计元器件原理图库】
- 【评测】小鼠肝细胞系(GHA1、AML12、BNL CL.2)培养实验操作步骤
热门文章
- python编程多少钱_中山python编程课学习大概多少钱
- linux5.4获取root权限,gcc++漏洞 普通用户获取root权限
- mysql 5.6.15.0 源码_源码编译mysql-5.6.15
- python权重相似度矩阵_gensim之使用稀疏矩阵相似度,判断输入的文字意图
- html php简单程序,PHP_php简单的分页程序,[code]html head me - phpStudy
- 算法:单词匹配290. Word Pattern
- mac sublime text 3 列操作,替换相同内容, 用动态输入的方式
- 最大似然参数估计的求解
- php定时器使用,PHP实现javascript的定时器
- emplace_back() 和 push_back 的区别:emplace_back效率高,避免push_back使用时所需的额外副本或移动操作