这是本文档旧的修订版!
AIsing Programming Contest 2020 E Camel Train
这题比赛时没有做出来,后来发现用优先队列可以解决。每个骆驼有两个快乐值,用pair保存,然后用两个vector $L$和$R$存放各个骆驼,分三种情况:
1.$l>r$,此时要把骆驼放在前$k$个位置才能获得最大快乐值,但不能确定最终队伍里这个骆驼是否在前$k$个位置,所以总答案先加上$r$,在$L$里存入$\{k,l-r\}$
2.$l<r$,此时要把骆驼放在后$n-k$个位置才能获得最大快乐值,但不能确定最终队伍里这个骆驼是否在后$n-k$个位置,所以总答案先加上$l$,在$R$里存入$\{n-k,r-l\}$
3.$l=r$,随便放
下面考虑$L,R$内快乐值的计算:
我们将vector按位置先后排序,然后创建一个从小到大的优先队列,每取一个元素就向队列中存一个快乐值,答案也加上该快乐值。此时队内元素的个数也代表排好的队形,如果元素个数大于当前元素的位置,就相当于已经排满了,就必须减去队首的快乐值,直到可以插入元素为止,最后返回答案即可。
CF 1374E2 Reading Books
Boundary