luoguP5094 [USACO04OPEN]MooFest 狂欢节
get 到的
这种需要求 含 max 的式子,枚举最大值的方法非常普遍。
类似的,还有含 min , gcd 的式子,枚举他们也很普遍
主要难点
我们首先想到,先按 v 从小到大排序,因为这样既可以简化题意(即题意:每次都只需求第i头牛 之前的牛的坐标与x[i]的差的绝对值 的和(设为s_ans),最后乘以个v[i]即可,(这个应该就是枚举max了) ); 又可以避免重复计算距离
思考难点(即简化后的题意): 已知是考树状数组的题目,又知它方便于求和。
于是...我们点开了题解...
定义:第i头牛前面有num头牛的x坐标比x[i]小,并且他们的和为sum
思考得s_ans = 第i头牛前面的,x比x[i]小的牛对答案的贡献s1 + 第i头牛前面的,x比x[i]大的牛对答案的贡献s2
s1 = num * a[i].x - sum;
s2 = all - sum - a[i].x * (i-1-num);
#include<cstdio>
#include<algorithm>
using namespace std;
#define lowbit(x) x&(-x)
const int MAX = 20000+9;
int n;
long long ans;
int t_n[MAX]/*num*/, t_sum[MAX];
struct node{
int x, v;
bool operator < (const node& xx) const {
return v < xx.v;
}
}a[MAX];
void add(int x, int k, int *t) {
while(x <= MAX) t[x] += k, x += lowbit(x);//注意:坐标求和的右边界不是n
}
int query(int x, int *t) {
int res = 0;
while(x) {res += t[x], x -= lowbit(x);}
return res;
}
int main() {
freopen("01.in","r",stdin);
freopen("01.out","w",stdout);
scanf("%d", &n);
for(int i = 1; i <= n; i++) scanf("%d%d",&a[i].v, &a[i].x);
sort(a+1, a+1+n);
int all = 0, num, sum;
for(int i = 1; i <= n; i++) {
num = query(a[i].x, t_n);//先query再add,因为求的是i牛前面的
sum = query(a[i].x, t_sum);
ans += (long long)( num*a[i].x-sum + all-sum-a[i].x*(i-1-num) )*a[i].v;
add(a[i].x, 1, t_n);
add(a[i].x, a[i].x, t_sum);//?
all += a[i].x;
}
printf("%lld\n",ans);
return 0;
}
luoguP5094 [USACO04OPEN]MooFest 狂欢节的更多相关文章
- [bzoj3378][Usaco2004 Open]MooFest 狂欢节_树状数组
MooFest 狂欢节 bzoj-3378 Usaco-2004 Open 题目大意:给定一个n个数的a序列,每两个数之间有一个距离,两个点之间的权值为$max(a[i],a[j])*dis(i,j) ...
- bzoj3378[Usaco2004 Open]MooFest 狂欢节*
bzoj3378[Usaco2004 Open]MooFest 狂欢节 题意: n只奶牛,第i只听力为vi,坐标为xi,两只奶牛聊天时音量是max(vi,vj)*abs(xi-xj).求n(n-1)/ ...
- BZOJ3378:[USACO]MooFest 狂欢节(树状数组)
Description 每一年,约翰的N(1≤N≤20000)只奶牛参加奶牛狂欢节.这是一个全世界奶牛都参加的大联欢.狂欢节包括很多有趣的活动,比如干草堆叠大赛.跳牛栏大赛,奶牛之间有时还相互扎屁股取 ...
- [BZOJ3378] [Usaco2004 Open]MooFest 狂欢节(树状数组)
传送门 开2个树状数组 一个存的是下标,一个存的是数量 细节...看标称吧,懒得说了,好气啊 #include <cstdio> #include <iostream> #in ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- POJ 1990 MooFest(树状数组)
MooFest Time Limit: 1000MS Mem ...
- “双十一”购物狂欢节,电商运营和商业智能(BI)才是绝配
百年前,人们获取信息的方式是通过报纸.书籍:十年前,人们获取信息的方式是通过传统PC互联网:而如今,在4G网络高速发展的浪潮下,伴随着移动智能终端的普及,人们获取信息的方式已经逐渐转向了移动 ...
- MooFest POJ - 1990 (树状数组)
Every year, Farmer John's N (1 <= N <= 20,000) cows attend "MooFest",a social gather ...
- [USACO] 2004 Open MooFest 奶牛集会
题目背景 MooFest, 2004 Open 题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅栏,摸牛仔的屁股等等 ...
随机推荐
- Django2.1.1与xadmin0.6.0遇到的坑(一)
(1)django2.0把from django.core.urlresolvers修改成了django.urls 异常信息: ModuleNotFoundError: No module named ...
- [Go] 使用protobuf进行序列化和反序列化
先定义消息类型 orders.proto syntax = "proto2"; package message; message Orders { required int32 o ...
- jstree级联禁用后代节点的选择框
用jstree+jquery,做的树形展示. 这个话题,在Stack Overflow上有问答,要获取要禁用的节点,然后用获取子节点方法遍历后代节点,设置禁用选择框. 之后发现,jstree的获取子节 ...
- windows下切换Python运行环境。
1.首先确保你的系统里已经安装了Conda,打开命令行窗口,执行命令:conda --version 2.查看你的系统当前已有的Python环境,执行命令:conda info --envs,从图中我 ...
- Codeforces Round #584
传送门 A. Paint the Numbers 签到. Code #include <bits/stdc++.h> using namespace std; typedef long l ...
- linux下编译时的默认库和头文件搜索路径
链接库路径 默认的链接库路径,定义在搜索/etc/ld.so.conf下的一些路径,其包含了一些重要的系统位置:LIBRARY_PATH, 但如果定义了LD_LIBRARY_PATH, 动态库的搜索路 ...
- CF414D Mashmokh and Water Tanks
CF414D Mashmokh and Water Tanks 洛谷评测传送门 题目描述 Mashmokh is playing a new game. In the beginning he has ...
- LG4516/LOJ2546 「JSOI2018」潜入行动 树上背包
问题描述 LG4516 LOJ2546 题解 好一个毒瘤题. hkk:JSOI的签到题 设\(opt[i][j][0/1][0/1]\)代表结点\(i\)的子树,放置\(j\)个,\(i\)放不放,\ ...
- IT兄弟连 Java语法教程 流程控制语句 经典案例
使用continue忽略本次循环剩下的语句 continue的功能和break有点类似,区别是continue只是忽略本次循环剩下的语句,接着开始下一次循环,并不会终止循环:而break则是完全终止循 ...
- Oracle define用法简介教程
目录 1.define常量用法 2.&和&&符号用法 继上一篇博客Oracle绑定变量学习笔记,再写一篇define变量的简单教程 @ 1.define常量用法 注意:defi ...