POJ 1990 MooFest 题解 《挑战程序设计竞赛》
来源:互联网 发布:练字软件app 编辑:程序博客网 时间:2024/05/22 18:23
#include <iostream>#include<cstdio>#include<algorithm>using namespace std;typedef long long ll;const int MAX=20005;int n;pair<int,int> cow[MAX];ll num[MAX],dis[MAX];ll sum(ll *bit,int i){ ll s=0; while(i>0) { s+=bit[i]; i-=i&(-i); } return s;}ll sum(ll *bit,int from,int to){ return sum(bit,to-1)-sum(bit,from-1);}void add(ll *bit,int i,ll x){ while(i<=MAX) { bit[i]+=x; i+=i&(-i); }}int main(){ while(cin>>n) { for(int i=0;i<n;i++) cin>>cow[i].first>>cow[i].second; sort(cow,cow+n); ll res=0; for(int i=0;i<n;i++) { int h=cow[i].first,x=cow[i].second; ll left=sum(num,1,x),right=i-left; res+=h*((left*x-sum(dis,1,x))+(sum(dis,x+1,MAX)-right*x)); add(num,x,1); add(dis,x,x); } cout<<res<<endl; } return 0;}
好久未做线段树之类的题了,感觉生疏了许多,参考了一下别人的代码。
首先这一题使用了两个BIT,一个用来求左右两边的cow的个数,另外一个是用来记录所有点到原点的距离之和。
此外,此题先通过听力好坏程度排序,这样每次新更新的牛都是耳背的,不用再比较两个cow的的听力值了。
0 0
- POJ 1990 MooFest 题解 《挑战程序设计竞赛》
- POJ 2079 Triangle 题解 《挑战程序设计竞赛》
- 挑战程序设计竞赛---POJ.2686
- 挑战程序设计竞赛---POJ.3233
- 码农场 » POJ 2566 Bound Found 题解 《挑战程序设计竞赛》
- 码农场 » POJ 3421 X-factor Chains 题解 《挑战程序设计竞赛》
- 码农场 » POJ 2914 Minimum Cut 题解 《挑战程序设计竞赛》
- 求余小技巧 码农场 » POJ 3641 Pseudoprime numbers 题解 《挑战程序设计竞赛》
- [挑战程序设计竞赛] POJ 3253 - Fence Repair
- [挑战程序设计竞赛] POJ 3009 - Curling 2.0
- [挑战程序设计竞赛] POJ 3699 - Meteor Shower
- [挑战程序设计竞赛] POJ 2718 - Smallest Difference
- [挑战程序设计竞赛] POJ 3050 - Hopscotch
- [挑战程序设计竞赛] POJ 2376 - Cleaning Shifts
- [挑战程序设计竞赛] POJ 1328 - Radar Installation
- [挑战程序设计竞赛] POJ 3040 - Allowance
- [挑战程序设计竞赛] POJ 1862 - Stripies
- 挑战程序设计竞赛 poj 2431 优先队列
- HDU 2352 Verdis Quo(模拟)
- Insert Interval (Java)
- Android开发--桌面浮动歌词窗口
- android跑马灯效果的TextView
- hdu 3460 Ancient Printer (字典树)
- POJ 1990 MooFest 题解 《挑战程序设计竞赛》
- win7 64位,vs2010(visual studio2010)环境下配置openCV2.4.8版本,以及可能遇到的问题
- Count and Say
- ios弹菊花和推荐
- A B Codeforces Round #285 (Div. 2)
- [LeetCode] Fraction to Recurring Decimal
- Oracle 精萃
- LRU 算法
- 关于斐波那契数列的改进