题目:
https://www.luogu.org/problemnew/show/2827
首先一个蚯蚓被切割后,其他蚯蚓会增加q => 这个蚯蚓-q;
每次操作将此蚯蚓-q,然后最后统一+q * m即可;
85分暴力:
用堆模拟就行了;O(m log n)
100分正解:
O(n log n + m)
三个单调队列维护,第一个存初始蚯蚓,第二个存切割后的第一段,第三个存切割后的第二段,这是单调递减的,因为前面在切割前必然大于后面的,所以切割后也大于后面的;
注意inf需要赋为MAX int;
暴力:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
priority_queue<int>Q;
int n,m,q,t,x,delta,num,cnt,tot,u1,u2,S;
int ans[6000001];
double u,v;
void solve()
{
cin>>n>>m>>q>>u>>v>>t;
for(int i=