进士后人
查看原帖
进士后人
524994
Ptilopsis_楼主2024/8/10 16:55

请这么写del()

void del(int x)
{
	x=a[x];
	sum[cnt[x]]-=x;
	cnt[x]--;
	sum[cnt[x]]+=x;
	if(cnt[x]==sz)//sz=sqrt(n)
		st.erase(x);
}

而不是这样

void del(int x)
{
	x=a[x];
	sum[cnt[x]]-=x;
	cnt[x]--;
	if(cnt[x]==sz)
		st.erase(x);
	else
		sum[cnt[x]]+=x;
}

因偷懒而直接copy add()导致调了半小时,警钟敲烂(而且add也可以按照第一种方法写)

2024/8/10 16:55
加载中...