一个无法理解的错误
查看原帖
一个无法理解的错误
385748
渡鸦2007楼主2022/7/30 14:22
void _work(int x, int w) //区间中加入 w 只颜色为 x 的袜子,更新相关信息
{
    ans -= cnt[x] * (cnt[x] - 1) / 2; //减去原来的 cnt[x] 只颜色为 x 的袜子中选两只的方案数
    cnt[x] += w; //颜色为 x 的袜子数量 + w
    ans += cnt[x] * (cnt[x] - 1) / 2; //加上新的 cnt[x] 只颜色为 x 的袜子中选两只的方案数
}

void work(int x,int w)
{
	ans -= cnt[a[x]] * (cnt[a[x]] - 1) / 2; 
    cnt[a[x]] += w; 
    ans += cnt[a[x]] * (cnt[a[x]] - 1) / 2; 
}
while (r < q[j].r) work(a[++r], 1);
while (r > q[j].r) work(a[r--], -1);
while (l < q[j].l) work(a[l++], -1);
while (l > q[j].l) work(a[--l], 1);

while (r < q[j].r) work(++r, 1);
while (r > q[j].r) work(r--, -1);
while (l < q[j].l) work(l++, -1);
while (l > q[j].l) work(--l, 1);


请问上面的做法与下面的有何不同,上面的可过

2022/7/30 14:22
加载中...