每一首歌在不同的频段有不同的响度,而EQ(Equalizer,均衡器)可以用来帮助调整各个频段的响度。为了方便精确地调整响度,谷米莱莉娅用时间魔法将一首歌的某个时刻切片了出来,因此现在只需要考虑这一个时刻的情况。
通常情况下,响度的大小范围在(−∞,0],这首歌一共有n(1≤n≤1e6)个频段的响度不为−∞。谷米莱莉娅的耳机拥有的EQ核心科技能够进行如下操作: 选定一个任意的连续频段闭区间,然后对其中所有频段的响度提升任意大小。现在谷米莱莉娅想提升歌曲的总体响度,于是她开始调她的EQ。她希望所有不为−∞的频段的响度中的最小值尽量大。但很快她就发现,如果存在频段的响度超过0,将会产生削波,让音乐变得不好听。所以她懒得调了,现在她希望你能帮她调好EQ,使得满足所有不为−∞的频段的响度中的最小值尽量大的同时,不存在频段的响度超过0。
样例输入1 复制 3 1 -2 2 -3 3 -5
样例输出1 复制 -2
样例输入2 复制 7 1 -2 2 -3 4 -6 7 -5 5 -4 3 -5 6 -7
样例输出2 复制 -3
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10,mod=1e9+7;
struct node
{
int id,num;
bool operator<(const node&w)const{
return id<w.id;
}
}eq[N];
int n,t,a[N],f[N],res,num,ans,m,k;
bool vis,st;
bool check(int u)
{
vis=false,st=false;
int l=1e18,r=-1e18;
for(int i=1;i<=n;i++){
if(st&&eq[i].num<u) return false;
if(vis&&eq[i].num<=u){
int l_=eq[i].num-u,r_=eq[i].num;
if(l<r_||r>l_) return false;
l=min(l,l_),r=max(r,r_);
}
else if(vis) st=true;
if(eq[i].num<u&&!vis) vis=true,l=eq[i].num-u,r=eq[i].num;
}
return true;
}
signed main()
{
std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++) cin>>eq[i].id>>eq[i].num;
sort(eq+1,eq+1+n);
int l=-1e18,r=0;
while(l<r){
int mid=l+r+1>>1;
if(check(mid)) l=mid;
else r=mid-1;
}
cout<<r;
return 0;
}