当前位置: 代码迷 >> 综合 >> hdu 6318
  详细解决方案

hdu 6318

热度:97   发布时间:2023-11-24 14:37:03.0

题目  :Problem - 6318 (hdu.edu.cn)

#include<bits/stdc++.h>
using namespace std;
int n,k,b[100010],num[100010],x,y;
struct node{int val;int order;
}a[100010];
bool cmp(node s1,node s2){return s1.val<s2.val;
}
void add(int x,int y){while(x<=n){num[x]+=y;x+=x&-x;}
}
int query(int x){int res=0;while(x>=1){res+=num[x];x-=x&-x;}return res;
}
int main(){while(cin>>n&&n){scanf("%d %d",&x,&y);memset(num,0,sizeof num);for(int i=1;i<=n;i++){scanf("%d",&a[i].val);a[i].order=i;}sort(a+1,a+n+1,cmp);b[a[1].order]=1;int count=1;for(int i=2;i<=n;i++){if(a[i].val==a[i-1].val){b[a[i].order]=count;}else{b[a[i].order]=++count;}}long long res=0;for(int i=1;i<=n;i++){add(b[i],1);res+=query(count)-query(b[i]);}if(x>=y){printf("%lld\n",res*y);}else{printf("%lld\n",res*x); }}return 0;
}