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 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅栏,摸牛仔的屁股等等 ...
随机推荐
- 初识Kotlin之函数
本章通过介绍Kotlin的基本函数,默认参数函数,参数不定长函数,尾递归函数,高阶函数,Lamdba表达式.来对Kotlin函数做进一步了解.将上一篇的Kotlin变量的知识得以运用.Kotlin变量 ...
- Pyhton 连接数据库
Python连接MySql 步骤 开始 创建connection 获取cursor 操作过程 SQL语句 执行查询 执行命令 获取数据 处理数据 关闭游标:cursor.close() 关闭连接:co ...
- linux下关闭selinux
找到 /etc/sysconfig/selinux 文件 修改 SELINUX=enable 使之 SELINUX=disable 重启 reboot
- The Preliminary Contest for ICPC Asia Shenyang 2019
传送门 B. Dudu's maze 题意: 是什么鬼东西???我读题可以读半小时QAQ 给出一张无向图,一个人在里面收集糖果,每个点都有一个糖果,特殊点除外.当他第一次进入特殊点时,会随机往一条边走 ...
- 重装windows后如何恢复mysql服务
如果重装系统后之前的mysql还在的话,可又直接恢复,不需要安装: 注意my.ini文件的位置,应该与bin目录同级: 进入cmd,然后进入你的mysql的bin目录,输入命令:mysqld inst ...
- day89_11_11Flask启动,配置,路由,fbv和cbv
一.flask的形成. flask是一个基于python并且以来jinja2模板和werkzeug wsgi服务器的一个微型框架. 安装了flask模块就代表安装了wekzeug,所以先安装flask ...
- AcWing 34. 链表中环的入口结点
习题地址 https://www.acwing.com/problem/content/description/86/ 题目描述给定一个链表,若其中包含环,则输出环的入口节点. 若其中不包含环,则输出 ...
- NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver ...
显卡驱动找不到解决方案:亲测有效 step1:sudo apt-get install dkms step2: sudo dkms install -m nvidia -v 390.129 nvi ...
- git pull出错:cannot pull into a repository with state: merging_resolved"
git pull 出错解放办法:1.尝试先提交现有代码到本地,再更新2.git reset —hard
- Go package: strings
Go strings Go 的 strings 包中包含许多处理字符串的函数 官方文档:https://golang.org/pkg/strings/ 前缀.后缀 判断字符串前缀.后缀 // 判断字符 ...