码迷,mamicode.com
首页 > 其他好文 > 详细

[USACO 04OPEN]MooFest

时间:2018-01-20 16:59:22      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:amp   cti   size   opera   tput   color   using   多少   ctime   

Description

约翰的N 头奶牛每年都会参加“哞哞大会”。哞哞大会是奶牛界的盛事。集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等。它们参加活动时会聚在一起,第i 头奶牛的坐标为Xi,没有两头奶牛的坐标是相同的。奶牛们的叫声很大,第i 头和第j 头奶牛交流,会发出max{Vi; Vj}×|Xi − Xj | 的音量,其中Vi 和Vj 分别是第i 头和第j 头奶牛的听力。假设每对奶牛之间同时都在说话,请计算所有奶牛产生的音量之和是多少。

Input

• 第一行:单个整数N,1 ≤ N ≤ 20000

• 第二行到第N + 1 行:第i + 1 行有两个整数Vi 和Xi,1 ≤ Vi ≤ 20000; 1 ≤ Xi ≤ 20000

Output

• 单个整数:表示所有奶牛产生的音量之和

Sample Input

4
3 1
2 5
2 6
4 3

Sample Output

57

题解

开四个树状数组。

第一个为以 $V$ 为关键词,牛个数的前缀;

第二个为以 $V$ 为关键词, $X$ 的前缀;

第三个为以 $V$ 为关键词, $V$ 的前缀;

第四个为以 $V$ 为关键词, $X\times V$ 的前缀。

然后扫一遍随便乱搞就好了。

 1 //It is made by Awson on 2018.1.20
 2 #include <set>
 3 #include <map>
 4 #include <cmath>
 5 #include <ctime>
 6 #include <queue>
 7 #include <stack>
 8 #include <cstdio>
 9 #include <string>
10 #include <vector>
11 #include <cstdlib>
12 #include <cstring>
13 #include <iostream>
14 #include <algorithm>
15 #define LL long long
16 #define Abs(a) ((a) < 0 ? (-(a)) : (a))
17 #define Max(a, b) ((a) > (b) ? (a) : (b))
18 #define Min(a, b) ((a) < (b) ? (a) : (b))
19 #define Swap(a, b) ((a) ^= (b), (b) ^= (a), (a) ^= (b))
20 #define writeln(x) (write(x), putchar(‘\n‘))
21 #define lowbit(x) ((x)&(-(x)))
22 using namespace std;
23 const int N = 20000;
24 void read(int &x) {
25     char ch; bool flag = 0;
26     for (ch = getchar(); !isdigit(ch) && ((flag |= (ch == -)) || 1); ch = getchar());
27     for (x = 0; isdigit(ch); x = (x<<1)+(x<<3)+ch-48, ch = getchar());
28     x *= 1-2*flag;
29 }
30 void write(LL x) {
31     if (x > 9) write(x/10);
32     putchar(x%10+48);
33 }
34 int n;
35 struct tt {
36     int v, x;
37     bool operator < (const tt &b) const {return x < b.x; }
38 }a[N+5];
39 struct bittree {
40     LL c[N+5];
41     void add(int x, int val) {for (; x <= N; x += lowbit(x)) c[x] += val; }
42     LL query(int x) {
43     LL ans = 0;
44     for (; x; x -= lowbit(x)) ans += c[x];
45     return ans;
46     }
47 }T1, T2, T3, T4; //T1 tol, T2 tolx, T3 tolt, T4 tolx*t
48 
49 void work() {
50     read(n); for (int i = 1; i <= n; i++) read(a[i].v), read(a[i].x);
51     sort(a+1, a+n+1); LL ans = 0;
52     for (int i = 1; i <= n; i++) {
53     ans += (T1.query(a[i].v)*a[i].x-T2.query(a[i].v))*a[i].v;
54     ans += (T3.query(N)-T3.query(a[i].v))*a[i].x-(T4.query(N)-T4.query(a[i].v));
55     T1.add(a[i].v, 1), T2.add(a[i].v, a[i].x), T3.add(a[i].v, a[i].v), T4.add(a[i].v, a[i].x*a[i].v);
56     }
57     writeln(ans);
58 }
59 int main() {
60     work();
61     return 0;
62 }

 

[USACO 04OPEN]MooFest

标签:amp   cti   size   opera   tput   color   using   多少   ctime   

原文地址:https://www.cnblogs.com/NaVi-Awson/p/8321149.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!