juyana

loj 1083

Sep 28th, 2017
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.03 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #include<cstdio>
  3. using namespace std;
  4.  
  5. #define READ freopen("in.txt", "r", stdin)
  6. #define WRITE freopen("out.txt", "w", stdout)
  7. #define ll int long long
  8. #define ull unsigned long long
  9. #define ld long double
  10. #define lld long long double
  11. #define pi acos(-1)
  12. #define pb push_back
  13. #define pbk pop_back
  14. #define m_p make_pair
  15. #define gcd(a,b) __gcd(a,b)
  16. #define lcd(a,b) (a/gcd(a,b))*b
  17. #define INF 1000010
  18. #define M 1000000000+7
  19. #define dist(ax,ay,bx,by) ((ax-bx)*(ax-bx)+(ay-by)*(ay-by))
  20. #define sort(t) sort(t.begin(),t.end())
  21.  
  22. //int a[8]= {-1,-1,-1,0,0,1,1,1};
  23. //int b[8]= {-1,0,1,-1,1,-1,0,1};
  24.  
  25.  
  26. //int n;
  27. int arr[100000+10];
  28. int tree[400000 + 100];
  29. int init(int node, int b, int e)
  30. {
  31. if (b == e)
  32. {
  33. tree[node] = arr[b];
  34. return arr[b];
  35. }
  36. int Left = node * 2;
  37. int Right = node * 2 + 1;
  38. int mid = (b + e) / 2;
  39. int x=init(Left, b, mid);
  40. int y= init(Right, mid + 1, e);
  41. return tree[node] = min(x,y);
  42. }
  43. int query(int node, int b, int e, int i, int j)
  44. {
  45. if (i > e || j < b)
  46. return -1;
  47. if (b >= i && e <= j)
  48. return tree[node];
  49. int Left = node * 2;
  50. int Right = node * 2 + 1;
  51. int mid = (b + e) / 2;
  52. int p1 = query(Left, b, mid, i, j);
  53. int p2 = query(Right, mid + 1, e, i, j);
  54. return min(p1, p2);
  55. }
  56. ll area(int n,int b,int e)
  57. {
  58. if(b>e) return 0;
  59. if(b==e) return arr[b];
  60. int mn=query(1,1,n,b,e);
  61. ll ans=max(area(n,b,mn-1),area(n,mn+1,e));
  62. ll ans2=(e-b+1)*(arr[mn]);
  63. return max(ans,ans2);
  64. }
  65. int main()
  66. {
  67.  
  68. int t,n,kase=0;
  69. scanf("%d ",&t);
  70. while(t--)
  71. {
  72. scanf("%d",&n);
  73. for(int i=1;i<=n;i++)
  74. scanf("%d ",&arr[i]);
  75. init(1,1,n);
  76. printf("Case %d: %lld\n",++kase,area(n,1,n));
  77.  
  78. }
  79. }
Advertisement
Add Comment
Please, Sign In to add comment