BZOJ3378:[USACO]MooFest 狂欢节(树状数组)
Description
Input
Output
Sample Input
3 1
2 5
2 6
4 3
Sample Output
57
Solution
首先把奶牛按听力排序,那么$max(vi,vj)~(j<i)$一定是$v_i$。问题变成了对于每个$i$,求它和前面奶牛的$dis$和。
开两个树状数组$A$和$B$,$A_i$表示下标为$i$的奶牛的坐标和,$B_i$表示下标为$i$的奶牛的个数,然后算一下就好了。
Code
#include<iostream>
#include<cstdio>
#include<algorithm>
#define N (20009)
#define LL long long
using namespace std; int n;
pair<int,int>a[N];
LL ans,p1,q1,p2,q2; struct BIT
{
LL c[N]; void Update(int x,int k)
{
for (; x<=; x+=(x&-x)) c[x]+=k;
}
LL Query(int x)
{
LL ans=;
for (; x; x-=(x&-x)) ans+=c[x];
return ans;
}
}A,B; inline int read()
{
int x=,w=; char c=getchar();
while (c<'' || c>'') {if (c==-'-') w=-; c=getchar();}
while (c>='' && c<='') x=x*+c-'', c=getchar();
return x*w;
} int main()
{
n=read();
for (int i=; i<=n; ++i) a[i].first=read(), a[i].second=read();
sort(a+,a+n+);
for (int i=; i<=n; ++i)
{
int v=a[i].first,x=a[i].second;
A.Update(x,x); B.Update(x,);
LL p1=A.Query(x-),q1=B.Query(x-);
ans+=v*(q1*x-p1);
LL p2=A.Query()-A.Query(x),q2=B.Query()-B.Query(x);
ans+=v*(p2-q2*x);
}
printf("%lld\n",ans);
}
BZOJ3378:[USACO]MooFest 狂欢节(树状数组)的更多相关文章
- POJ1990--POJ 1990 MooFest(树状数组)
Time Limit: 1000MSMemory Limit: 30000K Total Submissions: 8141Accepted: 3674 Description Every year, ...
- POJ 1990 MooFest(树状数组)
MooFest Time Limit: 1000MS Mem ...
- POJ_1990 MooFest 【树状数组】
一.题面 POJ1990 二.分析 一个简单的树状数组运用.首先要把样例分析清楚,凑出57,理解一下.然后可以发现,如果每次取最大的v就可以肆无忌惮的直接去乘以坐标差值就可以了,写代码的时候是反着来的 ...
- POJ 1990 MooFest【 树状数组 】
题意:给出n头牛,每头牛有一个听力v,坐标x,两头牛之间的能量为max(v1,v2)*dist(v1,v2),求总的能量值 先将每头牛按照v排序,排完顺序之后,会发现有坐标比当前的x小的,会有坐标比当 ...
- POJ 1990:MooFest(树状数组)
题目大意:有n头牛,第i头牛声调为v[i],坐标为x[i],任意两值牛i,j沟通所需的花费为abs(x[i]-x[j])*max(v[i],v[j]),求所有牛两两沟通的花费. 分析: 我们将奶牛按声 ...
- [bzoj3378][Usaco2004 Open]MooFest 狂欢节_树状数组
MooFest 狂欢节 bzoj-3378 Usaco-2004 Open 题目大意:给定一个n个数的a序列,每两个数之间有一个距离,两个点之间的权值为$max(a[i],a[j])*dis(i,j) ...
- [BZOJ3378] [Usaco2004 Open]MooFest 狂欢节(树状数组)
传送门 开2个树状数组 一个存的是下标,一个存的是数量 细节...看标称吧,懒得说了,好气啊 #include <cstdio> #include <iostream> #in ...
- MooFest POJ - 1990 (树状数组)
Every year, Farmer John's N (1 <= N <= 20,000) cows attend "MooFest",a social gather ...
- POJ 1990 MooFest --树状数组
题意:牛的听力为v,两头牛i,j之间交流,需要max(v[i],v[j])*dist(i,j)的音量.求所有两两头牛交谈时音量总和∑(max(v[i],v[j])*abs(x[j]-x[i])) ,x ...
随机推荐
- Centos6.5安装Redis3.0备忘记录
Centos6.5安装Redis3.0 1. 安装C编译环境 首先需要安装编译Redis的C环境,在命令行执行以下命令: [root@itzhouq32 tools] yum install gcc- ...
- Java并发编程-CountDownLatch
基于AQS的前世今生,来学习并发工具类CountDownLatch.本文将从CountDownLatch的应用场景.源码原理解析来学习这个并发工具类. 1. 应用场景 CountDownLatch是并 ...
- 10个JavaScript常见BUG及修复方法
译者按: JavaScript语言设计太灵活,用起来不免要多加小心掉进坑里面. 原文: Top 10 bugs and their bug fixing 译者: Fundebug 为了保证可读性,本文 ...
- HTML表格,table,thead,tbody,tfoot,th,tr,td,的属性以及跨行,跨列
在HTML中表格是作为一个整体来解析的,解析完才会在页面显示,如果表格很复杂很长,加载时间很长,用户体验就不好.所以这里就要用到表格结构标签,解析一部分就显示一部分,不用等表格全部加载完再显示. 表格 ...
- layui 自定义表单验证的几个实例
*注:使用本方法请先引入layui依赖的layu.js和layui.css 1.html <input type="text" name="costbudget&q ...
- BZOJ2746: [HEOI2012]旅行问题(AC自动机 LCA)
Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 1188 Solved: 383[Submit][Status][Discuss] Descripti ...
- 2018-08-14 中文代码之Spring Boot实现简单REST服务
最终目标详见: 参考MSDN,试搞.NET类库标识符的翻译版 · Issue #54 · program-in-chinese/overview 此文仅为技术探索+原型搭建的第一小步. 源码库: 演示 ...
- MySQL 性能优化-数据库死锁监控
MySQL性能优化-数据库死锁监控 by:授客 QQ:1033553122 1)表锁定 通过检查 table_locks_waited 和 table_locks_immediate 状态变量来分析表 ...
- ionic开发中,输入法键盘弹出遮挡住div元素
采用ionic 开发中,遇到键盘弹出遮挡元素的问题. 以登陆页面为例,输入用户名和密码时,键盘遮挡了登陆按钮. 最终采用自定义指令解决了问题: .directive('popupKeyBoardSho ...
- python 正则表达式中反斜杠(\)的麻烦和陷阱
这里是一点小心得:由于下面两个原因,在正则表达式中使用反斜杠就会产生了一个双重转换的问题. (1).python自身处理字符串时,反斜杠是用于转义字符 (2).正则表达式也使用反斜杠来转义字符 ...