听说这题也是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 奶牛集会(归并排序)相关推荐

  1. USACO 2004 MooFest 奶牛集会

    题目 问题描述 约翰的n 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在一起,第i 头奶牛的坐 ...

  2. 洛谷 P2345 奶牛集会 解题报告

    P2345 奶牛集会 题目背景 MooFest, 2004 Open 题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨 ...

  3. usaco 奶牛集会 奶牛抗议

    奶牛集会 Description 约翰家的N头奶牛每年都会参加"哞哞大会" .哞哞大会是世界奶牛界的盛事.集会上 的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.当然,哞哞大叫肯 ...

  4. luogu P2345 奶牛集会

    二次联通门 : luogu P2345 奶牛集会 /*luogu P2345 奶牛集会权值线段树以坐标为下标, 坐标为值建立线段树 对奶牛按听力由小到大排序对于要查的牛 每次第i次放入奶牛起作用的v就 ...

  5. P2345 奶牛集会(树状数组or模拟)

    题目背景 MooFest, 2004 Open 题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅栏,摸牛仔的屁股等等 ...

  6. 读数据优化 绝对值函数优化 加速 示范程序 洛谷P2345奶牛集会

    # pragma G++ optimize "O3"//一号加速 #include<cstdio> #include<cctype> #include< ...

  7. P2345 奶牛集会(树状数组/CDQ分治)

    题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在一起,第i 头奶牛的坐标为X ...

  8. P2345 奶牛集会

    题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在一起,第i 头奶牛的坐标为X ...

  9. P2345 奶牛集会/P2657 低头一族

    luogu 传送门 双倍经验! 树状数组题 v[i]只有当和比它小的v[j]一起运算时才对答案有贡献. 我们可以这样来处理,离线来做.将所有奶牛按照v升序排序,然后一个奶牛一个奶牛的查询,再插入. 我 ...

  10. noip2017考前整理(未完)

    快考试了,把我以前写过的题回顾一下. Noip2007 树网的核:floyd,推出性质,暴力. Noip2008 笨小猴:模拟 Noip2008 火柴棒等式:枚举 Noip2008 传纸条:棋盘dp ...

最新文章

  1. gps两点距离 php,PHP应用:PHP计算百度地图两个GPS坐标之间距离的方法
  2. 电路交换-报文交换-分组交换- 分组交换包括:虚电路和数据报
  3. 合格SEOER应该具备的能力
  4. 管理系统制作的python代码_python学生管理系统代码实现
  5. Linux crontab下关于使用date命令和sudo命令的坑
  6. rpm打包的流程包括以下哪些_品牌策划的流程包括哪些?
  7. jq事件不自执行方法
  8. 右键打开方式添加应用程序无法设置
  9. 越来越难?这届开发者学不会的计算机理论
  10. High performance find query using lean() in mongoose
  11. 解决vue axios跨域请求发送两次问题
  12. 未知宽高div水平垂直居中的3种方法
  13. usionCharts 技术文档-Jsp画图
  14. [转] ubuntu开启SSH服务
  15. 新建word文件时出现页眉横线
  16. C语言-学习笔记完整版
  17. 央视记者点赞京东物流 仓库分拣员变身时尚白领管理300个机器人
  18. WinHex(16进制编辑器)
  19. 【利用Altium Designer2018设计元器件原理图库】
  20. 【评测】小鼠肝细胞系(GHA1、AML12、BNL CL.2)培养实验操作步骤

热门文章

  1. python编程多少钱_中山python编程课学习大概多少钱
  2. linux5.4获取root权限,gcc++漏洞 普通用户获取root权限
  3. mysql 5.6.15.0 源码_源码编译mysql-5.6.15
  4. python权重相似度矩阵_gensim之使用稀疏矩阵相似度,判断输入的文字意图
  5. html php简单程序,PHP_php简单的分页程序,[code]html head me - phpStudy
  6. 算法:单词匹配290. Word Pattern
  7. mac sublime text 3 列操作,替换相同内容, 用动态输入的方式
  8. 最大似然参数估计的求解
  9. php定时器使用,PHP实现javascript的定时器
  10. emplace_back() 和 push_back 的区别:emplace_back效率高,避免push_back使用时所需的额外副本或移动操作