做法是一样的

  1. 题目背景
  2.  
  3. MooFest, Open
  4.  
  5. 题目描述
  6.  
  7. 约翰的N 头奶牛每年都会参加“哞哞大会”。哞哞大会是奶牛界的盛事。集会上的活动很
  8.  
  9. 多,比如堆干草,跨栅栏,摸牛仔的屁股等等。它们参加活动时会聚在一起,第i 头奶牛的坐标为Xi,没有两头奶牛的坐标是相同的。奶牛们的叫声很大,第i 头和第j 头奶牛交流,会发出max{Vi; Vj}×|Xi Xj | 的音量,其中Vi Vj 分别是第i 头和第j 头奶牛的听力。假设每对奶牛之间同时都在说话,请计算所有奶牛产生的音量之和是多少。
  10.  
  11. 输入输出格式
  12.  
  13. 输入格式:
  14. 第一行:单个整数N N
  15.  
  16. 第二行到第N + 行:第i + 行有两个整数Vi Xi Vi ; Xi
  17.  
  18. 输出格式:
  19. 单个整数:表示所有奶牛产生的音量之和
  20.  
  21. 输入输出样例
  22.  
  23. 输入样例#:
  24.  
  25. 输出样例#:
  26.  
  27. 说明
  28.  
  29. 朴素O(N2)
  30.  
  31. 类似于归并排序的二分O(N logN)
  32.  
  33. 树状数组O(N logN)

V奶牛的集会

  1. 题目描述
  2.  
  3. 一群青年人排成一队,用手机互相聊天。
  4.  
  5. 每个人的手机有一个信号接收指标,第i个人的接收指标设为v[i]。
  6.  
  7. 如果位置在x[i]的人要和位置在xj的人聊天,那么这两人组成的一对的信号发射强度就是abs(x[i]-x[j])*max(v[i],v[j]).
  8.  
  9. 现在我们想知道,这些人所有对子中的信号发射强度的总和。
  10.  
  11. 输入输出格式
  12.  
  13. 输入格式:
  14. 第一行一个整数N,接下来N行,每行两个整数v[i]和x[i]。
  15.  
  16. 输出格式:
  17. 所有对的信号发射强度总和。
  18.  
  19. 输入输出样例
  20.  
  21. 输入样例#:
  22.  
  23. 输出样例#:
  24.  
  25. 说明
  26.  
  27. 对于40%的数据,N<=,
  28.  
  29. 对于100%的数据,N<=, x[i]≤,
  30.  
  31. [color=red]注意:可能有两人在同一个位置
  32. 答案在int64long long范围内[/color]

低头一族

 思路: 

  先按照V排一下序只考虑X就行了,因为对于V大的来说,他和别人的贡献只是X的差得和。(这个用lowbit维护)。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<string.h>
  4. #include<algorithm>
  5. #include<math.h>
  6. #include<cmath>
  7. using namespace std;
  8. typedef long long LL;
  9. int n;
  10. LL num[],tot[];
  11. struct node{
  12. int x;
  13. int v;
  14. }a[];
  15. int lowbit(int x) {return x&(-x);}
  16. bool cmp(node a,node b)
  17. {
  18. return a.v<b.v;
  19. }
  20. long long ans;
  21. int MAX;
  22. void Add(LL *C,int x,int y)
  23. {
  24. while(x<=MAX)
  25. {
  26. C[x]+=y;
  27. x+=lowbit(x);
  28. }
  29. }
  30. LL query(LL *C,int x)
  31. {
  32. LL res=;
  33. while(x>)
  34. {
  35. res+=C[x];
  36. x-=lowbit(x);
  37. }
  38. return res;
  39. }
  40. int main()
  41. {
  42. scanf("%d",&n);
  43. for(int i=;i<=n;i++)
  44. scanf("%d%d",&a[i].v,&a[i].x),MAX=max(MAX,a[i].x);
  45. sort(a+,a++n,cmp);
  46. for(int i=,x,v;i<=n;i++)
  47. {
  48. x=a[i].x,v=a[i].v;
  49. LL totl,totr,numl,numr;
  50. numl=query(num,x-);totl=query(tot,x-);
  51. numr=query(num,MAX)-query(num,x);totr=query(tot,MAX)-query(tot,x);
  52.  
  53. ans+=v*(totr-totl+x*numl-x*numr);
  54. Add(num,x,);
  55. Add(tot,x,x);
  56. }
  57. cout<<ans;
  58. return ;
  59. }

P2345 奶牛集会andP2657 低头一族的更多相关文章

  1. 洛谷 P2345 奶牛集会 解题报告

    P2345 奶牛集会 题目背景 MooFest, 2004 Open 题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨 ...

  2. luogu P2345 奶牛集会

    二次联通门 : luogu P2345 奶牛集会 /* luogu P2345 奶牛集会 权值线段树 以坐标为下标, 坐标为值建立线段树 对奶牛按听力由小到大排序 对于要查的牛 每次第i次放入奶牛起作 ...

  3. 洛谷P2345 奶牛集会

    题目背景 MooFest, 2004 Open 题目描述 约翰的N 头奶牛每年都会参加“哞哞大会”.哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚 ...

  4. 洛谷 P2345 奶牛集会

    https://www.luogu.org/problem/show?pid=2345 题目描述 约翰的N 头奶牛每年都会参加“哞哞大会”.哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅 ...

  5. p2345 奶牛集会

    传送门 题目 约翰的N 头奶牛每年都会参加“哞哞大会”.哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在一起,第i 头奶牛的坐标为Xi,没有两头奶 ...

  6. luogu P2345 奶牛集会 |排序+树状数组

    题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在一起,第i 头奶牛的坐标为X ...

  7. AC日记——奶牛集会 洛谷 P2345

    奶牛集会 思路: 把奶牛按照v排序: 然后,每次都把奶牛放入一个集合s: 因为奶牛已经排序: 所以,每次第i次放入奶牛起作用的v就是vi: 每次ans+=(xi*sum-sumxl)*vi+(sumx ...

  8. usaco 奶牛集会 && 奶牛抗议

    奶牛集会 Description 约翰家的N头奶牛每年都会参加“哞哞大会” .哞哞大会是世界奶牛界的盛事.集会上 的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.当然,哞哞大叫肯定也包括在内. 奶牛 ...

  9. [luogu]P2657低头一族[树状数组]

    [luogu]P2657 低头一族 题目描述 一群青年人排成一队,用手机互相聊天. 每个人的手机有一个信号接收指标,第i个人的接收指标设为v[i]. 如果位置在x[i]的人要和位置在xj的人聊天,那么 ...

随机推荐

  1. TGraphiControl响应WM_MOUSEMOVE的过程(以TPaintBox为例)good

    起因:非Windows句柄控件也可以处理鼠标消息,我想知道是怎么处理的:并且想知道处理消息的顺序(比如TPaintBox和TForm都响应WM_Mouse消息该怎么办)界面:把TPaintBox放到T ...

  2. babel的安装和使用方法

    要使用Babel, 我们需要nodeJS的环境和npm, 主要安装了nodeJS, npm就默认安装了 , 现在安装nodeJS很简单了, 直接下载安装就好了: 安装es-checker 在使用Bab ...

  3. RedisCluster集群原理

    主从复制,数据值每个服务器都存了. 针对redis集群的解决方案, 连接这个集群,不用在乎Master了 6台redis 1.why use Redis? 减轻数据库访问压力 2.持久化 RDB(间隔 ...

  4. easyui 日期范围前后台的设置以及实现

    1.页面部分(引入相应的js) <td class="w40 tl pl10">从日期:</td> <td> <input class=& ...

  5. windwo访问linux文件夹方法

    windwo访问linux文件夹:是通过linux的samba来实现的: 安装samba需要安装samba-client.samba-common.smaba3个包. 一:安装rpm 现有一个服务器l ...

  6. [Selenium] WebDriver 操作 HTML5 中的 drag/drop

    以 jQuery UI 官方网站元素测试,地址:http://jqueryui.com/draggable/ 示例: package com.learningselenium.html5; impor ...

  7. GCD深入理解(1)

    写在前面 本文原文为raywenderlich的<grand-central-dispatch-in-depth-part-1>:顺便提及一下,笔者认为,对于iOS初学者而言,raywen ...

  8. [AHOI 2006] 上学路线

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1266 [算法] 首先 , 用Dijkstra求单源最短路 然后 , 建出这张图G的最 ...

  9. 空间数据索引RTree完全解析及Java实现

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/MongChia1993/article/details/69941783 第一部分 空间数据的背景介 ...

  10. 在头文件#pragma comment(lib,"glaux.lib");编译器提示waring C4081: 应输入“newline“

    在头文件#pragma comment(lib,"glaux.lib");编译器提示waring C4081: 应输入“newline“ #行不能加分号的