树状数组(好)-poj1990
来源:互联网 发布:美橙互联怎么解析域名 编辑:程序博客网 时间:2024/06/08 13:16
Language:
MooFest
Time Limit: 1000MS Memory Limit: 30000KTotal Submissions: 4549 Accepted: 1895
Description
Every year, Farmer John's N (1 <= N <= 20,000) cows attend "MooFest",a social gathering of cows from around the world. MooFest involves a variety of events including haybale stacking, fence jumping, pin the tail on the farmer, and of course, mooing. When the cows all stand in line for a particular event, they moo so loudly that the roar is practically deafening. After participating in this event year after year, some of the cows have in fact lost a bit of their hearing.
Each cow i has an associated "hearing" threshold v(i) (in the range 1..20,000). If a cow moos to cow i, she must use a volume of at least v(i) times the distance between the two cows in order to be heard by cow i. If two cows i and j wish to converse, they must speak at a volume level equal to the distance between them times max(v(i),v(j)).
Suppose each of the N cows is standing in a straight line (each cow at some unique x coordinate in the range 1..20,000), and every pair of cows is carrying on a conversation using the smallest possible volume.
Compute the sum of all the volumes produced by all N(N-1)/2 pairs of mooing cows.
Each cow i has an associated "hearing" threshold v(i) (in the range 1..20,000). If a cow moos to cow i, she must use a volume of at least v(i) times the distance between the two cows in order to be heard by cow i. If two cows i and j wish to converse, they must speak at a volume level equal to the distance between them times max(v(i),v(j)).
Suppose each of the N cows is standing in a straight line (each cow at some unique x coordinate in the range 1..20,000), and every pair of cows is carrying on a conversation using the smallest possible volume.
Compute the sum of all the volumes produced by all N(N-1)/2 pairs of mooing cows.
Input
* Line 1: A single integer, N
* Lines 2..N+1: Two integers: the volume threshold and x coordinate for a cow. Line 2 represents the first cow; line 3 represents the second cow; and so on. No two cows will stand at the same location.
* Lines 2..N+1: Two integers: the volume threshold and x coordinate for a cow. Line 2 represents the first cow; line 3 represents the second cow; and so on. No two cows will stand at the same location.
Output
* Line 1: A single line with a single integer that is the sum of all the volumes of the conversing cows.
Sample Input
43 12 52 64 3
Sample Output
57现在这智商太着急了。。。首先将这n头牛按照v值从小到大排序。这样,排在后面的牛和排在前面的牛讲话,两两之间所用的音量必定为后面的牛的v值,这样一来才有优化的余地。然后,对于某头牛i来说,只要关心跟排在他前面的牛交流就好了。我们必须快速地求出排在他前面的牛和他之间距离的绝对值只和ans,只要快速地求出ans,就大功告成。这里需要两个树状数组。树状数组可以用来快速地求出某个区间内和,利用这个性质,我们可以快速地求出对于牛i,x位置比i小牛的个数,以及这个牛的位置之和。这里就需要两个树状数组,一个记录比x小的牛的个数a,一个记录比x小的牛的位置之和b,然后,我们可以快速地求出牛i和比牛i位置小的牛的所有距离的绝对值为:a*x[i]-b;也可以方便地求出比牛i位置大的牛到牛i的距离和,即所有距离-b-(i-1-a)*x[i]下面是代码:#include<iostream>#include<set>#include<map>#include<vector>#include<queue>#include<cmath>#include<climits>#include<cstdio>#include<string>#include<cstring>#include<algorithm>typedef long long LL;using namespace std;const int MAX=20005;struct node{ LL v,x; friend bool operator<(node a,node b) { return a.v<b.v; }}cow[MAX];int N;LL num[2][MAX];int low(int x){ return x&(-x);}LL sum(int x,int biao){ LL ans=0; while(x>0) { ans+=num[biao][x]; x-=low(x); } return ans;}void update(int x,LL v,int biao){ while(x<=20000) { num[biao][x]+=v; x+=low(x); }}int main(){ //freopen("in.txt","r",stdin); while(cin>>N) { for(int i=1;i<=N;i++) scanf("%lld%lld",&cow[i].v,&cow[i].x); sort(cow+1,cow+N+1); memset(num,0,sizeof(num)); LL ans=0; for(int i=1;i<=N;i++) { LL a=sum(cow[i].x,0),b=sum(cow[i].x,1); ans+=(a*cow[i].x-b+sum(20000,1)-b-(i-1-a)*cow[i].x)*cow[i].v; update(cow[i].x,1,0); update(cow[i].x,cow[i].x,1); } cout<<ans<<endl; } return 0;}
- 树状数组(好)-poj1990
- poj1990(树状数组好题)
- POJ1990 (树状数组)
- 待续poj1990(树状数组)
- POJ1990 MooFest(树状数组)
- POJ1990 MooFest,树状数组
- poj1990 树状数组+排序
- poj1990&&uva1428 树状数组
- poj1990两个树状数组
- poj1990 moofest 树状数组
- POJ1990-MppFest-树状数组
- 【树状数组--思维】poj1990 MooFest
- POJ1990 MooFest 树状数组(Binary Indexed Tree,BIT)
- poj1990~MooFest(哥拿下的第一个树状数组)
- POJ1990 MooFest——树状数组
- poj1990 MooFest && hdu3015 Disharmony Trees (树状数组)
- poj1990--我的第一道AC树状数组题
- 树状数组好题(codeforces828E)
- Linux系统的分区概念
- 2013hpuacm第八周周赛题
- 6.2 复杂的listView展现
- 移动短信网关接入必须的几个参数
- vim插件配置模板
- 树状数组(好)-poj1990
- OCP-1Z0-053-V12.02-629题
- 6.3 popub窗体 popubWindow
- OCP-1Z0-053-V12.02-658题
- 纯虚函数、虚函数和非虚函数
- [设计模式]策略模式
- Uva-10142-Australian Voting
- library sort (图书馆排序)
- java之回调函数