POJ 1990 MooFest

来源:互联网 发布:淘宝开店图片怎么弄 编辑:程序博客网 时间:2024/04/30 23:25

Need two tree array to get answer;

The portal:http://poj.org/problem?id=1990

#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#include <iostream>#include <algorithm>using namespace std;const long long  M = 20005;struct Cows {long long  value;long long  position;bool operator < (const Cows & a1) const {return a1.value > value;}}cows[M];long long  Bit_num[2][M+5];void Insert(long long  x,long long  value,long long flag) {for(long long  i = x ; i <= M ; i += i & -i) {Bit_num[flag][i] += value;}}long long  Query(long long  x,long long flag) {long long  ret = 0;for(long long  i = x ; i ; i -= i & -i) {ret += Bit_num[flag][i];}return ret;}void Deal_with() {long long  n;while(~scanf("%lld",&n)){memset(Bit_num,0,sizeof(Bit_num));for(long long  i=1 ; i <= n ; i++) {scanf("%lld %lld",&cows[i].value,&cows[i].position);}sort(cows+1,cows+n+1);long long  ans = 0;for(long long  i=1 ; i <= n ; i++) {long long  a = Query(cows[i].position,0); long long  b = Query(cows[i].position,1);long long  c = Query(M,1);ans += cows[i].value * (cows[i].position * a - b +c - b - (i - a - 1) * cows[i].position) ;Insert(cows[i].position,cows[i].position,1);Insert(cows[i].position,1,0);}printf("%lld\n",ans);}}int main(void) {//freopen("a.in","r",stdin);Deal_with();return 0;}



0 0
原创粉丝点击