Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- using lli = long long;
- const lli INF = 2e18;
- const int inf = 2e9;
- using pli = pair <lli, int>;
- lli qs[6000010];
- int main(){
- int n, w;
- scanf("%d%d", &n, &w);
- deque <pli> dq;
- lli mx = 0;
- int L = inf;
- for(int i=1;i<=n;i++){
- scanf("%lld", &qs[i]);
- qs[i] += qs[i-1];
- while(dq.size() > 0 and qs[i-1] - dq.back().first <= 0) // ช่วงนั้นๆเป็น - หรือ 0 ไม่ควรนำมารวมด้วย
- dq.pop_back();
- dq.push_back({qs[i-1], i});
- while(dq.size() > 0 and i - dq.front().second + 1 > w) // ไม่อยู่ในช่วงที่จะพิจารณา
- dq.pop_front();
- if(qs[i] - dq.front().first == mx){ // ผลรวมเท่ากันเอาความยาวที่สั้นที่สุด
- L = min(L, i - dq.front().second + 1);
- }
- else if(qs[i] - dq.front().first > mx){
- mx = qs[i] - dq.front().first; // หาผลรวมที่มากที่สุด
- L = i - dq.front().second + 1; // ความยาว
- }
- }
- if(mx <= 0) printf("0\n0");
- else printf("%lld\n%d", mx, L);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement