题目背景 嘛,这道非常简单的给大家提供信心的省选题洛谷居然没有! 这么简单的题怎么可以没有! 给大家提升士气是义不容辞的责任! 所以我就来补一下啦.. 值得一提的是,标程是我自己做的.. 很渣,因为数据很水所以能AC.. 大神勿喷.. 题目描述 有 m 个小组, n 个元素,每个元素属于且仅属于一个小组. 支持以下操作: push x:使元素 x 进队,如果前边有 x 所属小组的元素,x 会排到自己小组最后一个元素的下一个位置,否则 x 排到整个队列最后的位置. pop:出队,弹出队头并输出出队…
易知可利用优先队列选取最大值: 但是通过分析可知,先取出的蚯蚓分开后仍然要比后分的长,所以可直接利用单调队列找队头即可,分三个单调队列,分别找未切割,切割,切割2三种情况 #include<bits/stdc++.h> #define rep(i,x,y) for(register int i=x;i<=y;i++) #define ll long long using namespace std; ; ; ; int n,m,q,u,v,t,add; ][M],head[],tail[…
注意转移方程 分1.凭空买 2.不买不卖 3.在原来基础上买 4.在原来基础上卖 四种情况 head=1,tail=0;再判断一下head<=tail也可以 #include<bits/stdc++.h> using namespace std; ; int n,m,w,ans; int ap[N],bp[N],as[N],bs[N]; int f[N][N]; ],head=,tail=; int main() { scanf("%d%d%d",&n,&am…
[P3662][USACO17FEB]Why Did the Cow Cross the Road II S 求解连续的k个数的最大值,利用前缀和维护即可. #include<bits/stdc++.h> using namespace std; ; int sum[N]; int main() { int n,b,k; scanf("%d%d%d",&n,&k,&b); ,x;i<b;i++){ scanf("%d",&a…