abc 370 D
set<int> a; // 在 set 中的用法
auto t = a.lower_bound(x); 返回第一个大于等于 x 的迭代器,都小于 x,返回 a.end()
用lower_bound找对应的每行每列大于的值,如果找到的大于的迭代器不是a.begin(),说明存在比该值小的
然后用prev找到之前一个,删除该位置
与之对应的还有next,对应下一个
abc 334 C
写起来相当麻烦,边界处理上加了特判,比较冗杂,或许可以在一个数组里表示两种前后缀和的方法会好一些
abc 333 C
找规律,高斯求和
abc 331 C
第一时间想用桶排实现,但不知道为什么会 WA 很多(大半夜的调了半天发现1e6-1是6个9不是5个)
再想用sort(p.begin(), p.end(), [&](int i, int j){...})的方法
但想了想还是太麻烦,看了看jiangly的解题
用了upper_bound(b.begin(),b.end(), a[i]) - b.begin() 可以找到这个数再排序好的数组中是什么位置,以用后缀求解
// 这个是 vector 中的用法
int i = upper_bound(b.begin(),b.end(), a[i]) - b.begin();
// 返回 > a[i] 的第一个迭代器
int j = upper_bound(b.begin(), b.end(), a[i]) - b.begin();
// 返回 >= a[i] 的第一个迭代器
abc 330 C
这道题需要注意数据范围,初始化sqare的时候开太小了,导致 WA