Saleh127

Light OJ 1093

Jul 1st, 2021
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.75 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define test int t; cin>>t; for(int cs=1;cs<=t;cs++)
  5. ll a[100005];
  6. ll tree1[400005];
  7. ll tree2[400005];
  8.  
  9. void treeconstruct(ll node,ll b,ll e)
  10. {
  11. if(b==e)
  12. {
  13. tree1[node]=a[b];
  14. tree2[node]=a[b];
  15. return;
  16. }
  17.  
  18. ll left = node*2;
  19. ll right = node*2 + 1ll;
  20.  
  21. ll mid=(b+e)/2;
  22.  
  23. treeconstruct(left,b,mid);
  24. treeconstruct(right,mid+1,e);
  25.  
  26. tree1[node]=max(tree1[left],tree1[right]);
  27. tree2[node]=min(tree2[left],tree2[right]);
  28.  
  29. }
  30.  
  31. ll queriesmax(ll node,ll b,ll e,ll i,ll j)
  32. {
  33. if(i>e || j<b) return 0;
  34.  
  35. if(b>=i && e<=j) return tree1[node];
  36.  
  37. ll left = node*2;
  38. ll right = node*2 + 1ll;
  39.  
  40. ll mid=(b+e)/2;
  41.  
  42. ll x=queriesmax(left,b,mid,i,j);
  43. ll y=queriesmax(right,mid+1,e,i,j);
  44.  
  45. return max(x,y);
  46.  
  47. }
  48.  
  49. ll queriesmin(ll node,ll b,ll e,ll i,ll j)
  50. {
  51. if(i>e || j<b) return INT_MAX;
  52.  
  53. if(b>=i && e<=j) return tree2[node];
  54.  
  55. ll left = node*2;
  56. ll right = node*2 + 1ll;
  57.  
  58. ll mid=(b+e)/2;
  59.  
  60. ll x=queriesmin(left,b,mid,i,j);
  61. ll y=queriesmin(right,mid+1,e,i,j);
  62.  
  63. return min(x,y);
  64.  
  65. }
  66.  
  67.  
  68. int main()
  69. {
  70. ios_base::sync_with_stdio(0);
  71. cin.tie(0);
  72. cout.tie(0);
  73.  
  74. test
  75. {
  76. ll q,n,m,i,j,k,l=0;
  77.  
  78. cin>>n>>q;
  79.  
  80. for(i=1; i<=n; i++) cin>>a[i];
  81.  
  82. treeconstruct(1ll,1ll,n);
  83.  
  84. for(i=1;i<=(n-q);i++)
  85. {
  86. j=queriesmax(1,1,n,i,i+q-1);
  87. k=queriesmin(1,1,n,i,i+q-1);
  88. l=max(l,j-k);
  89. }
  90.  
  91. cout<<"Case "<<cs<<": "<<l<<endl;
  92.  
  93. memset(tree1,0,sizeof tree1);
  94. memset(tree2,0,sizeof tree2);
  95. memset(a,0,sizeof a);
  96. }
  97.  
  98. return 0;
  99. }
  100.  
Advertisement
Add Comment
Please, Sign In to add comment