sultan

Выкуси Макс

Nov 1st, 2012
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.22 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include <string>
  5. #include <map>
  6. #include <set>
  7. #include <vector>
  8. #include <algorithm>
  9. #include <queue>
  10. #include <bitset>
  11. #include <stack>
  12. #include <iostream>
  13. #include <fstream>
  14. #include <cmath>
  15.  
  16. #define sqr(a) ((a)*(a))
  17. #define odd(a) ((a)&1)
  18. #define foru(i,n) for (int i=0;i<(n);i++)
  19. #define ford(i,n) for (int i=(n)-1;i>=0;i--)
  20. #define forab(i,l,r) for (int i=(l);i<=(r);i++)
  21. #define forabd(i,r,l) for (int i=(r);i>=(l);i--)
  22. #define pb push_back
  23. #define F first
  24. #define S second
  25. #define all(x) x.begin(),x.end()
  26. #define sz(__X) (int)__X.size()
  27. #define pii pair<int,int>
  28.  
  29. const double eps=1e-19;
  30. const double PI=acos(-1.0);
  31. const int INF=1000*1000*1000+7;
  32. const int MAXN = 500005;
  33.  
  34. using namespace std;
  35.  
  36. int n,l;
  37. long long ans;
  38. vector< pair<long long,int> > a;
  39. //set<int> num, key;
  40. int b[MAXN];
  41. int sumr, suml;
  42. int lev[MAXN];
  43.  
  44. void merge_sort_with_blackjack_and_bitches(int l, int r)
  45. {
  46.     if ( l==r)
  47.         return;
  48.     int sr = (l+r)/2;
  49.     merge_sort_with_blackjack_and_bitches(l, sr);
  50.     merge_sort_with_blackjack_and_bitches(sr+1, r);
  51.     int i1=l, i2=sr+1;
  52.     for (int i=l; i<=r; i++)
  53.     {
  54.         if ( i2>r || (b[i1] < b[i2] && i1<=sr) )
  55.             lev[i] = b[i1++];
  56.             else
  57.             {
  58.                 lev[i] = b[i2++];
  59.         // it's a my magic formula
  60.                 ans += sr-i1+1;
  61.             }
  62.     }
  63.     for (int i=l; i<=r; i++)
  64.         b[i] = lev[i];
  65. }
  66.  
  67. int main()
  68. {
  69.     //freopen("input.txt", "r", stdin);
  70.     //freopen("output.txt", "w", stdout);
  71.     scanf("%d %d", &n, &l);
  72.     int tx;
  73.     long long sum;
  74.     ans=0;
  75.     vector<long long>::iterator it;
  76.     a.clear();
  77.     for (int i=0; i<n; i++)
  78.     {
  79.         scanf("%d", &tx);
  80.         sum = 1ll*l*tx + i +1;
  81.         a.push_back( make_pair(sum, i));
  82.         /*it = upper_bound( all(a), sum);
  83.         if ( it != a.end() )
  84.             ans += a.end() - it;
  85.         if ( it == a.end() )
  86.             a.push_back(sum);
  87.             else a.insert(it, sum);*/
  88.         //printf("\n"); for(int j=0; j<sz(a); j++) printf("%lld ", a[i]); printf("\n");
  89.     }
  90.     stable_sort( all(a));
  91.     for (int i=0; i<n; i++)
  92.         b[i] = a[i].S;
  93.     merge_sort_with_blackjack_and_bitches(0, n-1);
  94.     cout<<ans;
  95.     return 0;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment