求助这个代码的复杂度分析
查看原帖
求助这个代码的复杂度分析
88028
LastOrder_楼主2021/11/16 09:34

RT,我认为这个代码最劣复杂度是 O(n2logn)O(n^2\log n) 的( ff 函数最劣是 O(n)O(n) ,线段树修改操作稳稳 nlognn \log n ,为什么在这道题里可以跑得飞快?
大概率是我 ff 的复杂度算错了 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);
}
2021/11/16 09:34
加载中...