解释
在这里,我们在一条街道上有位置。起初,任何位置上都没有灯,没有灯的最大距离是 。现在,灯光已添加到某些位置。现在,我们需要找出没有灯光的最大距离。
这可以使用排序集来维护灯光位置,使用排序集来维护差异,并使用 map 来保持其计数。首先,当添加光源时,我们将尝试在其左侧和右侧找到光源。然后我们将从集合中删除差异。此外,我们还会将 和 添加到集合中。我们还将相应地更新地图和位置设置。right - left
curr_light - leftright - curr_light
在每次光照之后,我们只输出差异集的最大元素。
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int x,n;
cin>>x>>n;
set<int>positions;
multiset<int>diffs;
positions.insert(0);
positions.insert(x);
diffs.insert(x);
while(n--)
{
int light;
cin>>light;
auto left=positions.lower_bound(light);
auto right=positions.upper_bound(light);
left=prev(left);
diffs.erase(diffs.find(*right-*left));
diffs.insert(light-*left);
diffs.insert(*right-light);
positions.insert(light);
cout<<*diffs.rbegin()<<" ";
}
cout<<endl;
return 0;
}