题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6318
#define N 100005 #include <bits/stdc++.h> using namespace std; int c[N]; int n; int lowbit(int i) { return i&(-i); } int insert(int i,int x) { while(i<=n){ c[i]+=x; i+=lowbit(i); } return 0; }
int getsum(int i) { int sum=0; while(i>0){ sum+=c[i]; i-=lowbit(i); } return sum; } void output() { for(int i=1;i<=n;i++) cout<<c[i]<<" "; cout<<endl; } struct node{ int v; int id; bool operator <(const node &b)const{ if(v==b.v) return id<b.id; else return v<b.v; } }; node a[N]; int main() { int x,y; while(~scanf("%d %d %d",&n,&x,&y)){ long long ans=0; memset(c,0,sizeof(c)); for(int i=1;i<=n;i++){ scanf("%d",&a[i].v); a[i].id=i; } sort(a+1,a+1+n); for(int i=1;i<=n;i++) { insert(a[i].id,1); ans+=i-getsum(a[i].id);//统计当前序列中大于a的元素的个数 } cout<<ans*min(x,y)<<endl; } return 0; }