USACO26 moofest 奶牛集会(归并排序)
2024-08-31 07:21:16
听说这题也是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[],t[];
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)/;
mergesort(l,mid);
mergesort(mid+,r); LL suml=,sumr=;
for(int i=l;i<=mid;i++)suml+=a[i].p;
for(int i=mid+;i<=r;i++)sumr+=a[i].p; int i=l,j=mid+,p=l;
while(i<=mid&&j<=r)
{
if(a[i].v>a[j].v)
{
ans+=a[i].v*((r-j+)*a[i].p-sumr);
suml-=a[i].p;
t[p++]=a[i++];
}
else
{
ans+=a[j].v*(suml-(mid-i+)*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=;i<=n;i++)scanf("%d%d",&a[i].v,&a[i].p);
sort(a+,a+n+,cmp); ans=;
mergesort(,n);
printf("%lld\n",ans);
return ;
}
最新文章
- sh7.创建yum源脚本练习
- gbk和gb2312的区别
- linux 查看Java 进程的内存使用情况
- [BZOJ1220][POJ1091][HNOI2002]跳蚤
- DL,DT,DD,比传统table更语义,解析更快的table列表方式
- Android与JNI(一) ---- Java调用C 静态调用
- PHP环境搭建(20161014)
- 【java 多线程】多线程并发同步问题及解决方法
- todolist---插入和删除----vue
- 在ABP中使用linq
- DotNetCore学习-2.程序启动
- teragen/terasort_简化版
- 设计模式之Visitor(访问者)(转)
- redis使用问题总结
- 安装flutter和dart总结
- add new row to data.frame/dataframe
- MVVM模式的 数据绑定
- jquery 清除style样式
- JQuery iframe
- jsp和servlet的问题收集.... 答案有部分是自己理解的,可能有点差异
热门文章
- AI学习笔记(01)
- 大数据学习——redis安装
- zoj 2857 Image Transformation
- Kubernetes集群中修复状态为NotReady的节点
- Go循环语句
- POJ2455 Secret Milking Machine【二分,最大流】
- URAL 1614. National Project “Trams” [ 构造 欧拉回路 ]
- php之ThinkPHP的memcached类的修改
- jquery serializeArray() 方法通过序列化表单值来创建对象数组(名称和值)。
- Atom编辑Markdown文件保存后行尾的空格自动消失的问题解决