记录编号 268367 评测结果 AAAAAAAAAA
题目名称 [尼伯龙根之歌] 精灵魔法 最终得分 100
用户昵称 GravatarHzoi_Yniverse 是否通过 通过
代码语言 C++ 运行时间 0.240 s
提交时间 2016-06-12 14:45:15 内存使用 1.84 MiB
显示代码纯文本
  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. #include<algorithm>
  5. using namespace std;
  6. const int maxn=100010;
  7. struct Node{
  8. int data,num;
  9. }a[maxn];
  10. bool comp1(const Node &a,const Node &b){
  11. return a.data<b.data;
  12. }
  13. bool comp2(const Node &a,const Node &b){
  14. return a.num<b.num;
  15. }
  16. long long ans;
  17. long long c[maxn],n;
  18. long long Getsum(int);
  19. void Insert(int);
  20. int lowbit(int);
  21. int main(){
  22. freopen("alfheim.in","r",stdin);
  23. freopen("alfheim.out","w",stdout);
  24. scanf("%d",&n);
  25. for(int i=1;i<=n;i++) scanf("%d",&a[i].num);
  26. for(int i=1;i<=n;i++) scanf("%d",&a[i].data);
  27. sort(a+1,a+n+1,comp1);
  28. int last=0;
  29. for(int i=1;i<=n;i++){
  30. int x=a[i].data;
  31. if(a[i].data==last)a[i].data=a[i-1].data;
  32. else a[i].data=i;
  33. last=x;
  34. }
  35. sort(a+1,a+n+1,comp2);
  36. for(int i=1;i<=n;i++){
  37. ans+=Getsum(a[i].data+1);
  38. Insert(a[i].data);
  39. }
  40. printf("%lld",ans);
  41. return 0;
  42. }
  43. long long Getsum(int x){
  44. long long tot=0;
  45. for(int i=x;i<=n;i+=lowbit(i)){
  46. tot+=c[i];
  47. }
  48. return tot;
  49. }
  50. void Insert(int x){
  51. for(int i=x;i>0;i-=lowbit(i)){
  52. c[i]++;
  53. }
  54. }
  55. int lowbit(int x){
  56. return x&-x;
  57. }
  58.