Guest User

Untitled

a guest
Sep 4th, 2016
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.44 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define ll long long int
  6. #define pb push_back
  7. #define mp make_pair
  8. #define INF (ll)(1e18)
  9. #define inf 0x7fffffff
  10. #define inff 100000
  11. #define ff first
  12. #define ss second
  13. #define sz(x) ((int) (x).size())
  14. #define fast cin.sync_with_stdio(0);cin.tie(0)
  15. #define rep(i,N) for(int i = 0;i < N;i++)
  16. #define frep(i,a,b) for(int i = a;i <= b;i++)
  17. #define pii pair<int , int>
  18. #define pll pair<ll , ll>
  19. #define vii vector<int>
  20. #define vpii vector< pii >
  21. #define fill(A,v) memset(A,v,sizeof(A))
  22. #define setbits(x) __builtin_popcountll(x)
  23. #define print(A,j,k) for(int ii=j;ii<k;ii++)cout<<A[ii]<<" ";cout<<"\n"
  24. #define all(x) (x).begin(), (x).end()
  25. #define gcd __gcd
  26. #define SQRT 350
  27. #define CASES int t;cin>>t;while(t--)
  28. #define FILE freopen("inp.txt" , "r" , stdin);
  29. #define ld long double
  30.  
  31. const int MOD = 1e9 + 7;
  32. const int N = 1e6 + 5;
  33.  
  34. ll n , x;
  35. ll cost[2005][2005];
  36. ll Dist[N];
  37. ll A[N] , change[N];
  38. int vis[N];
  39.  
  40. /*
  41. 0 -> 10
  42. 1 -> 20
  43. 2 -> 1 + 30
  44. 3 -> 1
  45. */
  46.  
  47. int main(int argc, char const *argv[])
  48. {
  49. fast;
  50.  
  51. cin >> n >> x;
  52.  
  53. set< pair<ll , int> > S;
  54. for(int i = 0;i < n;i++) {
  55. cin >> A[i];
  56. Dist[i] = A[i];
  57. S.insert( {Dist[i] , i});
  58. }
  59.  
  60. ll current = 0;
  61.  
  62. while (S.size() > 0) {
  63.  
  64. auto it = S.begin();
  65. int source = it -> ss;
  66. // cout << "source " << source << '\n';
  67. vis[source] = 1;
  68. S.erase(it);
  69. int nxt;
  70. if (source == n - 1)
  71. nxt = 0;
  72. else
  73. nxt = source + 1;
  74.  
  75.  
  76. if (change[source] + 1 <= current) {
  77. if (Dist[nxt] > Dist[source]) {
  78. change[nxt] = change[source] + 1;
  79. Dist[nxt] = Dist[source];
  80. if (vis[nxt] == 0) {
  81. S.insert( {Dist[nxt] , nxt});
  82. }
  83. }
  84. }
  85. else {
  86. if (Dist[nxt] > Dist[source] + (change[source] + 1 - current) * x ) {
  87. change[nxt] = change[source] + 1;
  88. Dist[nxt] = Dist[source] + (change[source] + 1- current) * x;
  89. if (vis[nxt] == 0) {
  90. S.insert( {Dist[nxt] , nxt});
  91. }
  92. }
  93. }
  94. current = max(current , change[nxt]);
  95. }
  96.  
  97. // print(Dist , 0 , n);
  98.  
  99. ll ans = 0;
  100. for(int i = 0;i < n;i++)
  101. ans += Dist[i];
  102. cout << ans << '\n';
  103.  
  104. return 0;
  105. }
Add Comment
Please, Sign In to add comment