[BZOJ3378] [Usaco2004 Open]MooFest 狂欢节(树状数组)
开2个树状数组
一个存的是下标,一个存的是数量
细节。。。看标称吧,懒得说了,好气啊
#include <cstdio>
#include <iostream>
#include <algorithm>
#define N 20001
#define LL long long
#define max(x, y) ((x) > (y) ? (x) : (y)) int n, m;
LL ans, sum, c[N], d[N]; struct node
{
LL x, v;
}p[N]; inline int read()
{
int x = 0, f = 1;
char ch = getchar();
for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';
return x * f;
} inline bool cmp(node x, node y)
{
return x.v < y.v;
} inline LL query1(int x)
{
LL ret = 0;
for(; x; x -= x & -x) ret += d[x];
return ret;
} inline LL query2(int x)
{
LL ret = 0;
for(; x; x -= x & -x) ret += c[x];
return ret;
} inline void add1(int x, LL y)
{
for(; x <= m; x += x & -x) d[x] += y;
} inline void add2(int x, LL y)
{
for(; x <= m; x += x & -x) c[x] += y;
} int main()
{
int i;
n = read();
for(i = 1; i <= n; i++)
{
p[i].v = read();
p[i].x = read();
m = max(m, p[i].x);
}
std::sort(p + 1, p + n + 1, cmp);
for(i = 1; i <= n; i++)
{
ans += (p[i].x * query2(p[i].x) - query1(p[i].x)) * p[i].v;
ans += (sum - query1(p[i].x) - p[i].x * (i - query2(p[i].x) - 1)) * p[i].v;
sum += p[i].x;
add1(p[i].x, p[i].x);
add2(p[i].x, 1);
}
printf("%lld\n", ans);
return 0;
}
[BZOJ3378] [Usaco2004 Open]MooFest 狂欢节(树状数组)的更多相关文章
- BZOJ3378:[USACO]MooFest 狂欢节(树状数组)
Description 每一年,约翰的N(1≤N≤20000)只奶牛参加奶牛狂欢节.这是一个全世界奶牛都参加的大联欢.狂欢节包括很多有趣的活动,比如干草堆叠大赛.跳牛栏大赛,奶牛之间有时还相互扎屁股取 ...
- bzoj3378[Usaco2004 Open]MooFest 狂欢节*
bzoj3378[Usaco2004 Open]MooFest 狂欢节 题意: n只奶牛,第i只听力为vi,坐标为xi,两只奶牛聊天时音量是max(vi,vj)*abs(xi-xj).求n(n-1)/ ...
- [bzoj3378][Usaco2004 Open]MooFest 狂欢节_树状数组
MooFest 狂欢节 bzoj-3378 Usaco-2004 Open 题目大意:给定一个n个数的a序列,每两个数之间有一个距离,两个点之间的权值为$max(a[i],a[j])*dis(i,j) ...
- POJ 1990 MooFest(树状数组)
MooFest Time Limit: 1000MS Mem ...
- POJ1990--POJ 1990 MooFest(树状数组)
Time Limit: 1000MSMemory Limit: 30000K Total Submissions: 8141Accepted: 3674 Description Every year, ...
- 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]),求所有牛两两沟通的花费. 分析: 我们将奶牛按声 ...
- MooFest POJ - 1990 (树状数组)
Every year, Farmer John's N (1 <= N <= 20,000) cows attend "MooFest",a social gather ...
随机推荐
- 玄学C语言之scanf,printf
#include <bits/stdc++.h> using namespace std; int main() { int a,c,d; ]; scanf("%d." ...
- k8s 创建资源的两种方式【转】
命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建,比如: kubectl run nginx-deployment --image=nginx ...
- javascript“类”与继承总结和回顾
Javascipt语法不支持"类"(class)[es6已经支持],但是有模拟类的方法.今天我主要谈谈Javascipt中模拟“类”的方法及js中继承的总结和回顾. js中实现“类 ...
- python matplotlib.pyplot对图像进行绘制
imshow()是对图像进行绘制 imshow()函数格式为: matplotlib.pyplot.imshow(X, cmap=None) X: 要绘制的图像或数组. cmap: 颜色图谱(colo ...
- go语音实战读后感——一
1.第一个go程序: package main import ( "fmt" ) func main() { fmt.Println("Hello go") } ...
- monkeyrunner之控件ID不存在或重复(转载lynnLi)
我们在用monkeyrunner进行Android自动化时,通过获取坐标点或控件ID进行一系列操作.由于使用坐标点时,屏幕分辨率一旦更改,则代码中用到坐标的地方都要修改,这样导致代码的复用率较低.因此 ...
- OpenCV2:介绍
一.OpenCV简介 OpenCV所有的类和函数都在cv命名空间里面,可以用 using namespace cv; #include "opencv2/opencv.hpp" 1 ...
- shell脚本,awk实现行列转换
[root@localhost study]# cat file 张三 语文 张三 数学 李四 语文 李四 数学 王五 语文 王五 数学 王五 英语 怎么实现为下面的排序??? 语文 数学 语文 数学 ...
- 【mysql】配置 选项文件
在Windows中,MySQL程序从以下文件读取启动选项: 文件名 目的 WINDIR\my.ini 全局选项 C:\my.cnf 全局选项 INSTALLDIR\my.ini 全局选项 defaul ...
- shell中test的使用
#/secondin/secondfirstshecho “please enter two numseconder”read firstread secondif test $first -eq $ ...