Advertisement
hkshakib

Untitled

Mar 17th, 2020
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.86 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int mx = 1e5+10;
  4. int arr[mx];
  5. int tree[4*mx];
  6. void init1(int node,int b,int e)
  7. {
  8. if(b==e)
  9. {
  10. tree[node] = arr[b];
  11. return;
  12. }
  13. int left = node * 2;
  14. int right = node *2+1;
  15. int mid = (b+e)/2;
  16. init1(left,b,mid);
  17. init1(right,mid+1,e);
  18. tree[node]=max(tree[left],tree[right]);
  19. }
  20. void init(int node,int b,int e)
  21. {
  22. if(b==e)
  23. {
  24. tree[node] = arr[b];
  25. return;
  26. }
  27. int left = node * 2;
  28. int right = node *2+1;
  29. int mid = (b+e)/2;
  30. init(left,b,mid);
  31. init(right,mid+1,e);
  32. tree[node]=min(tree[left],tree[right]);
  33. }
  34. int query1(int node,int b,int e,int i,int j)
  35. {
  36. if(i>e || j<b)
  37. return 0;
  38. if(b>=i && e<=j)
  39. return tree[node];
  40. int left = node * 2;
  41. int right = node * 2 + 1;
  42. int mid = (b+e)/2;
  43. int p = query1(left,b,mid,i,j);
  44. int q = query1(right,mid+1,e,i,j);
  45. return max(p,q);
  46. }
  47. int query2(int node,int b,int e,int i,int j)
  48. {
  49. if(i>e || j<b)
  50. return 0;
  51. if(b>=i && e<=j)
  52. return tree[node];
  53. int left = node * 2;
  54. int right = node * 2 + 1;
  55. int mid = (b+e)/2;
  56. int p = query2(left,b,mid,i,j);
  57. int q = query2(right,mid+1,e,i,j);
  58. return min(p,q);
  59. }
  60. int main()
  61. {
  62. int t,cnt=1;
  63. scanf("%d",&t);
  64. while(t--)
  65. {
  66. int n,d;
  67. scanf("%d%d",&n,&d);
  68. for(int i=0;i<n;i++)
  69. scanf("%d",&arr[i]);
  70.  
  71. init1(1,0,n-1);
  72. init(1,0,n-1);
  73. int maxx =-1;
  74. int j = d;
  75. for(int i=0;i<=n-d;i++)
  76. {
  77. int p = query1(1,0,n-1,i,j);
  78. int q = query2(1,0,n-1,i,j);
  79. int pq= p-q;
  80. maxx = max(maxx,pq);
  81. j++;
  82. }
  83. printf("Case %d: ",cnt++);
  84. printf("%d",maxx);
  85. }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement