题目描述
There is a street of length x whose positions are numbered 0,1,...,x. Initially there are no traffic lights, but n sets of traffic lights are added to the street one after another.
Your task is to calculate the length of the longest passage without traffic lights after each addition.
输入
The first input line contains two integers x (1 ≤ x ≤ 109)and n(1 ≤ n ≤ 2*105): the length of the street and the number of sets of traffic lights.
Then, the next line contains n integers p1,p2,...,pn(0 < pi < x): the position of each set of traffic lights. Each position is distinct.
输出
Print the length of the longest passage without traffic lights after each addition.
样例输入 Copy
8 3 3 6 2
样例输出 Copy
5 3 3
使用set 快速找到每个节点插入后的左右节点
multiset 删除原有路段并加入新路段,快速查找当前最大值
cin cout超时
代码
cpp
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int x,n,p;
set<int>road;
multiset<int>dis;
int main(){
scanf("%d%d",&x,&n);
set<int>road{0,x};
multiset<int>dis{x};
for(int i=0;i<n;++i){
scanf("%d",&p);
road.insert(p);
auto it=road.find(p);
auto l=*prev(it);
auto r=*next(it);
dis.erase(dis.find(r-l));
dis.insert(p-l);
dis.insert(r-p);
printf("%d ",*dis.rbegin());
}
return 0;
}