hkshakib

Untitled

Mar 23rd, 2020
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.55 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const ll mod= 1e9+7,INF=1e18,mx= 1e6+5,mn=100;
  4. int testCase=1,cas=0;
  5. int ar[mx];
  6. pii Tree[3*mx];
  7. void init(int node,int st,int en) {
  8. if(st==en) {
  9. Tree[node].first=ar[st];
  10. Tree[node].second=ar[st];
  11. return;
  12. }
  13.  
  14. int Left = node << 1;
  15. int Right = Left | 1;
  16. int mid = (st + en) >> 1;
  17.  
  18. init(Left,st,mid);
  19. init(Right,mid+1,en);
  20.  
  21. Tree[node].first=max(Tree[Left].first,Tree[Right].first);
  22. Tree[node].second=min(Tree[Left].second,Tree[Right].second);
  23. }
  24.  
  25. pii query(int node,int st,int en,int x,int y) {
  26. if(st>y || en<x)
  27. return {INT_MIN,INT_MAX};
  28.  
  29. if(st>= x && en<=y) {
  30. return {Tree[node].first,Tree[node].second};
  31. }
  32.  
  33. int Left = node << 1;
  34. int Right = Left | 1;
  35. int mid = (st + en) >> 1;
  36.  
  37. pii a= query(Left,st,mid,x,y);
  38. pii b= query(Right,mid+1,en,x,y);
  39.  
  40. int c= max(a.first,b.first);
  41. int d= min(a.second,b.second);
  42. return {c,d};
  43. }
  44.  
  45. int main() {
  46.  
  47. scanf("%d",&testCase);
  48. while(testCase--) {
  49. int n,d;
  50.  
  51. scanf("%d %d",&n,&d);
  52.  
  53. for(int i=1; i<=n; i++) {
  54. scanf("%d",&ar[i]);
  55. }
  56.  
  57. init(1,1,n);
  58.  
  59. int ans=0,lim=n-d;
  60.  
  61. for(int i=1; i<=lim; i++) {
  62. pii x= query(1,1,n,i,i+d-1);
  63. ans=max(ans,x.first-x.second);
  64. }
  65.  
  66. printf("Case %d: %d\n",++cas,ans);
  67.  
  68. for(int i=0; i<mx; i++) {
  69. ar[i]=Tree[i].first=Tree[i].second=0;
  70. }
  71. }
  72. return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment