Logo ryp 的博客

博客

ABC343F 题解

...
ryp
2025-12-01 12:50:19
She's not square

本文章由 WyOJ Shojo 从洛谷专栏拉取,原发布时间为 2024-03-08 20:37:11

很明显就是线段树维护区间次小值的出现次数。

这里主要讲怎么把 push_up 写的简洁一些。


node
push_up (const node &l, const node &r)
{
  vector<pi> z; z.reserve (4);
  
  z.emplace_back (l.mx), z.emplace_back (l.pmx);
  z.emplace_back (r.mx), z.emplace_back (r.pmx);
  sort (begin (z), end (z), greater<pi> ());
  for (auto p = begin (z); p != prev (end (z)); p++)
    if (p->first == next (p)->first) p->second += next (p)->second;
  return { z[0], z[1].first == z[0].first ? z[2] : z[1] };
}

某些人写了六十行的大模拟还没调过

我们可以把值和出现次数捆绑在一起维护,这样就可以方便更新。先排序,然后维护一下出现次数即可。

完整代码(只有 74 行)

评论

暂无评论

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。