RT,我认为这个代码最劣复杂度是 O(n2logn) 的( f 函数最劣是 O(n) ,线段树修改操作稳稳 nlogn ,为什么在这道题里可以跑得飞快?
大概率是我 f 的复杂度算错了 qwq
double Max[N<<2],fir[N<<2];int ans[N<<2];
int f(double lim,int k,int l,int r){
if(Max[k] < lim)return 0;
if(lim < fir[k])return ans[k];
if(l == r)return Max[k] > lim;
int mid = (l + r) >> 1;
return f(lim,k<<1,l,mid) + f(max(Max[k<<1],lim),k<<1|1,mid+1,r);
}
void modify(int k,int l,int r,int x,double h){
if(l == r){Max[k] = h , ans[k] = 1 ,fir[k] = h;return;}
int mid = (l + r) >> 1;
if(x <= mid)modify(k<<1,l,mid,x,h);
else modify(k<<1|1,mid+1,r,x,h);
Max[k] = max(Max[k<<1],Max[k<<1|1]),
fir[k] = fir[k<<1] ? fir[k<<1] : fir[k<<1|1];
ans[k] = ans[k<<1] + f(Max[k<<1],k<<1|1,mid+1,r);
}