标签:font closed like esc ++ inter gif details hang
http://acm.hdu.edu.cn/showproblem.php?pid=2838
思路:
每个点的代价,就是前面比它大的点的个数乘以这个点再加上前面比它大的点的总和
然后树状数组乱搞
#include<bits/stdc++.h> using namespace std; #define N 100005 #define ll long long int int a[N],cnt[N],n,k,t; ll sum[N],ans; int lowbit(int x) { return x&(-x); } void add(int x) { int d=x; while(x<=n) { cnt[x]++; sum[x]+=d; x+=lowbit(x); } } int sum1(int x) { int s=0; while(x) { s+=cnt[x]; x-=lowbit(x); } return s; } ll sum2(int x) { ll s=0; while(x) { s+=sum[x]; x-=lowbit(x); } return s; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); add(a[i]); t=sum1(a[i]); k=i-t; if(k!=0) { ans+=(ll)a[i]*k; ans+=sum2(n)-sum2(a[i]); } } printf("%I64d\n",ans); return 0; }
标签:font closed like esc ++ inter gif details hang
原文地址:http://www.cnblogs.com/chen74123/p/7397514.html