Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #include <cstdio>
- #include <cstdlib>
- #define maxn 100001
- using namespace std;
- FILE * fin=fopen("ksum2.in", "r+");
- ofstream fout("ksum2.out");
- vector<int> arr;
- int N, K, W, pre[100001];
- #define DIM 10000
- char buff[DIM];
- int poz=0;
- void citeste(int &numar)
- {
- numar = 0;
- char semn='+';
- while (buff[poz] < '0' || buff[poz] > '9')
- {
- semn = buff[poz];
- if (++poz == DIM)
- fread(buff,1,DIM,fin),poz=0;
- }
- while ('0'<=buff[poz] && buff[poz]<='9')
- {
- numar = numar*10 + buff[poz] - '0';
- if (++poz == DIM)
- fread(buff,1,DIM,fin),poz=0;
- }
- if (semn == '-')
- numar = -numar;
- }
- int main()
- {
- int x;
- citeste(N);
- citeste(K);
- citeste(W);
- citeste(x);
- arr.push_back(x);
- pre[0]=x;
- for(int i=1; i<N; ++i)
- {
- citeste(x);
- arr.push_back(x);
- pre[i] = pre[i - 1] + arr[i];
- }
- multiset<int> s1;
- s1.insert(0);
- int ans = INT_MIN;
- ans = max(ans, pre[K - 1]);
- int flag = 0;
- for (int i = K; i < N; i++)
- {
- if (i - W >= 0)
- {
- if (flag == 0)
- {
- auto it = s1.find(0);
- s1.erase(it);
- flag = 1;
- }
- }
- if (i - K >= 0)
- s1.insert(pre[i - K]);
- ans = max(ans, pre[i] - *s1.begin());
- if(i - W >= 0)
- {
- auto it = s1.find(pre[i - W]);
- s1.erase(it);
- }
- }
- fout<<ans;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement