fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main() {
  5. int N, K, X, A[100001];
  6. long long B[100001];
  7. cin >> N >> K >> X;
  8. for(int i = 0; i < N; i++)
  9. cin >> A[i];
  10. for(int i = 0; i < N; i++) {
  11. cin >> B[i];
  12. if(i > 0)
  13. B[i] += B[i-1];
  14. }
  15. int start = lower_bound(A, A+N, X)-A;
  16. long long ans = 0;
  17. int right = start, left = 0;
  18. // cout << start << endl;
  19. while(right < N && A[right]-X <= K) {
  20. while(2*A[right]-K-X > A[left])
  21. left++;
  22. long long cand = B[right];
  23. if(start > left) {
  24. if(left > 0) cand -= B[left-1];
  25. }
  26. else {
  27. if(start > 0) cand -= B[start-1];
  28. }
  29. ans = max(ans, cand);
  30. // cout << left << " " << right << " " << cand << endl;
  31. right++;
  32. }
  33. right = N-1; left = start-1;
  34. while(left >= 0 && X-A[left] <= K) {
  35. while(2*A[left]+K-X < A[right])
  36. right--;
  37. long long cand = (start-1 > right ? B[start-1] : B[right]);
  38. if(left > 0) cand -= B[left-1];
  39. ans = max(ans, cand);
  40. // cout << left << " " << right << " " << cand << endl;
  41. left--;
  42. }
  43. cout << ans << endl;
  44. return 0;
  45. }
  46. /*
  47. 10 67 25
  48. 0 7 19 23 32 34 69 92 101 123
  49. 23 64 56 26 43 35 72 55 14 25
  50. */
Success #stdin #stdout 0.01s 5324KB
stdin
4 5 5
0 4 6 10
135 72 7 1273
stdout
1280