网站建设凡科,什么叫网站定位,网站管理与建设试题,哪些网站可做矿机期货选举
//a[i]1 or 0 or -1,表示i支持小奇 or 中立 or 支持魔法猪
//sum[i]a[1]a[2]...a[i]
//设dp[i]表示把1~i划分成若干区间,(小奇得票-魔法猪得票)的最大值
/*dp[i]max {dp[j]1 (sum[i]-sum[j]0即sum[i]sum[j])dp[j] (sum[i]-sum[j]0即sum[i]sum[j])dp[j]-1 (sum[…选举
//a[i]1 or 0 or -1,表示i支持小奇 or 中立 or 支持魔法猪
//sum[i]a[1]a[2]...a[i]
//设dp[i]表示把1~i划分成若干区间,(小奇得票-魔法猪得票)的最大值
/*dp[i]max {dp[j]1 (sum[i]-sum[j]0即sum[i]sum[j])dp[j] (sum[i]-sum[j]0即sum[i]sum[j])dp[j]-1 (sum[i]-sum[j]0即sum[i]sum[j])}(max(0,i-R)jmax(0,i-L))*/
//int get(int x){if(x0)return 1;if(x0)return -1;if(x0) return 0;}
//对于某一段区间中的j,dp[j]get(sum[i]-sum[j])的最大值是很难维护的,但dp[j]的最大值很好维护
/*所以考虑这么求dp[i]:dp[i]max{Max{dp[j]}(sum[j]sum[i]) 1Max{dp[j]}(sum[j]sum[i])Max{dp[j]}(sum[j]sum[i]) -1}(max(0,i-R)jmax(0,i-L))*/
#includeiostream
#includecstdio
#includevector
using namespace std;
const int N1e610;
const int inf1e9;
int read(){int x0,f1;char chgetchar();while(ch0||ch9){if(ch-)f-1;chgetchar();}while(ch0ch9){xx*10ch-0;chgetchar();}return x*f;
}
int n,L,R,a[N],sum[N],dp[N];
vectorint v[N1];
int l[N],r[N],pos[N],tot;
struct SegmentTree{int mx[N2];void build(int u,int l,int r){mx[u]-inf;if(lr) return;int mid(lr)1;build(u1,l,mid);build(u1|1,mid1,r);}void modify(int u,int l,int r,int pos,int val){if(lr){mx[u]val;return;}int mid(lr)1;if(posmid) modify(u1,l,mid,pos,val);else modify(u1|1,mid1,r,pos,val);mx[u]max(mx[u1],mx[u1|1]);}int query(int u,int l,int r,int L,int R){if(LR) return -inf;if(LlrR) return mx[u];int mid(lr)1;if(Rmid) return query(u1,l,mid,L,R);else if(Lmid) return query(u1|1,mid1,r,L,R);else return max(query(u1,l,mid,L,mid),query(u1|1,mid1,r,mid1,R));}
}T;
void ins(int i){T.modify(1,0,n,pos[i],dp[i]);
}
void del(int i){T.modify(1,0,n,pos[i],-inf);
}
int main(){nread();Lread();Rread();for(int i1;in;i) a[i]read();for(int i1;in;i) sum[i]sum[i-1]a[i];for(int i0;in;i) v[sum[i]n].push_back(i); for(int i0;inn;i){int lsttot;for(int j0;jv[i].size();j) pos[v[i][j]]tot;for(int j0;jv[i].size();j) l[v[i][j]]lst,r[v[i][j]]tot-1;}dp[0]0;T.build(1,0,n);for(int i1;in;i){if(i-R-10) del(i-R-1);if(i-L0) ins(i-L);int taT.query(1,0,n,0,l[i]-1);int tbT.query(1,0,n,r[i]1,n);int tcT.query(1,0,n,l[i],r[i]); if(ta!-inf) ta;if(tb!-inf) tb--;dp[i]max(ta,max(tb,tc));}if(dp[n]-inf) printf(Impossible\n);else printf(%d\n,dp[n]);return 0;
}