Advertisement
a53

nrinversiuni

a53
Nov 18th, 2019
412
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.00 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4. int n,i,x,aib[100005],v[100005],a[100005],b[100005];
  5. long long s;
  6.  
  7. int ub(int x)
  8. {
  9. return x & (-x);
  10. }
  11.  
  12. void update(int x)
  13. {
  14. for(int i=x;i<=n;i+=ub(i))
  15. aib[i]++;
  16. }
  17.  
  18. int query(int x)
  19. {
  20. long long s=0;
  21. for(int i=x;i>=1;i-=ub(i))
  22. s+=aib[i];
  23. return s;
  24. }
  25.  
  26. void normalizare()
  27. {
  28. for(int i=1;i<=n;i++)
  29. b[i]=a[i];
  30. sort(b+1,b+n+1);
  31. for(int i=1;i<=n;i++)
  32. {
  33. int st=1,p=0;
  34. int dr=n;
  35. int x=a[i];
  36. while(st<=dr)
  37. {
  38. int mij=(st+dr)/2;
  39. if(x<=b[mij])
  40. {
  41. p=mij;
  42. dr=mij-1;
  43. }
  44. else st=mij+1;
  45. }
  46. v[i]=p;
  47. }
  48. }
  49.  
  50. int main()
  51. {
  52. cin>>n;
  53. for(i=1;i<=n;i++)
  54. cin>>a[i];
  55. normalizare();
  56. for(i=n;i>=1;i--)
  57. {
  58. x=v[i];
  59. update(x);
  60. s+=query(x-1);
  61. }
  62. cout<<s<<'\n';
  63. return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement