Advertisement
Guest User

Untitled

a guest
Jul 31st, 2012
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.43 KB | None | 0 0
  1. #pragma comment(linker, "/STACK:268435456")
  2. #define _CRT_SECURE_NO_WARNINGS
  3. #define _CRT_SECURE_NO_DEPRECATE
  4. #include <cstdio>
  5. #include <iostream>
  6. #include <algorithm>
  7. #include <cmath>
  8. #include <string>
  9. #include <vector>
  10. #include <set>
  11. #include <map>
  12. #include <deque>
  13. #include <queue>
  14. #include <list>
  15. #include <stack>
  16. #include <cstring>
  17. #include <cstdlib>
  18. #include <complex>
  19. #include <ctime>
  20. #include <bitset>
  21. #include <iomanip>
  22. #include <sstream>
  23. using namespace std;
  24. const double PI = 3.1415926535897932384626433832795;
  25. template<class T> T min(T &a, T &b) { return (a<b) ? a : b; }
  26. template<class T> T max(T &a, T &b) { return (a>b) ? a : b; }
  27. template<class T> T sqr(T &a) { return a*a; }
  28. template<class T> T abs(T &a) { return (a<0) ? (-a) : a; }
  29. typedef long long ll;
  30. typedef unsigned long long ull;
  31. typedef long double ld;
  32. typedef pair<int,int> ii;
  33.  
  34. // int
  35. inline void read   (int &x) { scanf ("%d",   &x); }
  36. inline void readln (int &x) { scanf ("%d\n", &x); }
  37. inline void write  (int  x) { printf("%d",    x); }
  38. inline void writeln(int  x) { printf("%d\n",  x); }
  39. // long long
  40. #ifdef _WIN32
  41. inline void read   (ll &x) { scanf ("%I64d",   &x); }
  42. inline void readln (ll &x) { scanf ("%I64d\n", &x); }
  43. inline void write  (ll  x) { printf("%I64d",    x); }
  44. inline void writeln(ll  x) { printf("%I64d\n",  x); }
  45. #else
  46. inline void read   (ll &x) { scanf ("%lld",   &x); }
  47. inline void readln (ll &x) { scanf ("%lld\n", &x); }
  48. inline void write  (ll  x) { printf("%lld",    x); }
  49. inline void writeln(ll  x) { printf("%lld\n",  x); }
  50. #endif
  51. // double
  52. inline void read   (double &x) { scanf ("%lf",     &x); }
  53. inline void readln (double &x) { scanf ("%lf\n",   &x); }
  54. inline void write  (double  x) { printf("%.15lf",   x); }
  55. inline void writeln(double  x) { printf("%.15lf\n", x); }
  56. // string
  57. inline void read   (char* s) { scanf ("%s"  , s); }
  58. inline void readln (char* s) { scanf ("%s\n", s); }
  59. inline void write  (char* s) { printf("%s"  , s); }
  60. inline void writeln(char* s) { printf("%s\n", s); }
  61. // read methods
  62. inline int    readInt()    {    int x; read(x); return x; }
  63. inline ll     readLong()   {     ll x; read(x); return x; }
  64. inline double readDouble() { double x; read(x); return x; }
  65.  
  66. #define all(v) (v).begin(),(v).end()
  67. #define sz(v) ((int)((v).size()))
  68. #define PB push_back
  69. #define MP make_pair
  70. #define CLR(a) memset((a),0,sizeof(a))
  71. #define FILL(a,x) memset((a),(x),sizeof(a))
  72. #define fori(i,n) for(int i=0;i<((int)(n));i++)
  73. #define forab(i,a,b) for(int i=((int)(a));i<=((int)(b));i++)
  74. #define forba(i,b,a) for(int i=((int)(b));i>=((int)(a));i--)
  75. //------------------------------------------------------------------------------
  76.  
  77. int n;
  78. int a[100005];
  79. priority_queue<ii, vector<ii>, greater<ii> > pq;
  80. ll ans;
  81.  
  82. inline void update(int i, int x) {
  83.     if (i < 0 || i >= n) return;
  84.     if (a[i] <= x) return;
  85.     ans += a[i] - x;
  86.     a[i] = x;
  87.     pq.push(ii(a[i],i));
  88. }
  89.  
  90. int main()
  91. {
  92. #ifdef TEDDY_BEARS
  93.     freopen("input.txt", "r", stdin);
  94.     freopen("output.txt", "w", stdout);
  95. #else
  96.     //freopen("aaa.in", "r", stdin);
  97.     //freopen("aaa.out", "w", stdout);
  98. #endif
  99.  
  100.     int T = readInt();
  101.     for (int t = 1; t <= T; t++) {
  102.         read(n);
  103.         for (int i = 0; i < n; i++) {
  104.             read(a[i]);
  105.             pq.push(ii(a[i],i));
  106.         }
  107.         ans = 0;
  108.         while (!pq.empty()) {
  109.             ii p = pq.top(); pq.pop();
  110.             int x = p.first;
  111.             int i = p.second;
  112.             if (a[i] != x) continue;
  113.             update(i-1, x+1);
  114.             update(i+1, x+1);
  115.         }
  116.         writeln(ans);
  117.     }
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement