Advertisement
a53

KSum2

a53
Sep 9th, 2021
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.64 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #define maxn 100001
  5. using namespace std;
  6. FILE * fin=fopen("ksum2.in", "r+");
  7. ofstream fout("ksum2.out");
  8. vector<int> arr;
  9. int N, K, W, pre[100001];
  10.  
  11. #define DIM 10000
  12. char buff[DIM];
  13. int poz=0;
  14.  
  15. void citeste(int &numar)
  16. {
  17. numar = 0;
  18. char semn='+';
  19. while (buff[poz] < '0' || buff[poz] > '9')
  20. {
  21. semn = buff[poz];
  22. if (++poz == DIM)
  23. fread(buff,1,DIM,fin),poz=0;
  24. }
  25. while ('0'<=buff[poz] && buff[poz]<='9')
  26. {
  27. numar = numar*10 + buff[poz] - '0';
  28. if (++poz == DIM)
  29. fread(buff,1,DIM,fin),poz=0;
  30. }
  31. if (semn == '-')
  32. numar = -numar;
  33. }
  34.  
  35. int main()
  36. {
  37. int x;
  38. citeste(N);
  39. citeste(K);
  40. citeste(W);
  41. citeste(x);
  42. arr.push_back(x);
  43. pre[0]=x;
  44. for(int i=1; i<N; ++i)
  45. {
  46. citeste(x);
  47. arr.push_back(x);
  48. pre[i] = pre[i - 1] + arr[i];
  49. }
  50. multiset<int> s1;
  51. s1.insert(0);
  52. int ans = INT_MIN;
  53. ans = max(ans, pre[K - 1]);
  54. int flag = 0;
  55. for (int i = K; i < N; i++)
  56. {
  57. if (i - W >= 0)
  58. {
  59. if (flag == 0)
  60. {
  61.  
  62. auto it = s1.find(0);
  63. s1.erase(it);
  64. flag = 1;
  65. }
  66. }
  67. if (i - K >= 0)
  68. s1.insert(pre[i - K]);
  69. ans = max(ans, pre[i] - *s1.begin());
  70. if(i - W >= 0)
  71. {
  72. auto it = s1.find(pre[i - W]);
  73. s1.erase(it);
  74. }
  75. }
  76. fout<<ans;
  77. return 0;
  78. }
  79.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement