bzoj2442

来源:互联网 发布:info域名 编辑:程序博客网 时间:2024/06/05 18:57

单调队列。。。
我太菜了
,调了好一会儿

#include<bits/stdc++.h>using namespace std;#define FOR(i,s,t) for(int i=(s);i<=(t);i++)inline int read(void){    int x = 0, c, f = 1;    do{c=getchar();if(c=='-')f=-1;}while(c<'0'||c>'9');    do{x=x*10+c-'0';c=getchar();}while(c>='0'&&c<='9');    return x * f;}typedef long long LL;const int N = 101000;LL f[N], s[N];int a[N], q[N], l, r, n, K;int main(){    n = read(), K = read();    for (int i = 1; i <= n; i++)         s[i] = s[i - 1] + read();    for (int i = 1; i <= n; i++) {        while (l < r && q[l] < i - K - 1) l++;        f[i] = i <= K ? s[i] : f[q[l]] + s[i] - s[q[l] + 1];        while (l < r && f[q[r]] - s[q[r] + 1] <= f[i] - s[i+1]) r--;        q[++r] = i;    }    cout << f[n] << endl;}
原创粉丝点击