Venice Technique是我在cf补题的时候看到的,有兴趣的人可以看看这位大佬对这个技巧的描述:
大佬写的博客传送门
简单总结一下,该技巧可以看成一种数据结构.
并支持以下操作:
1.添加一个新元素到集合中.
2.把一个元素从集合中删去.
3.把集合中的所有元素加上一个值.
4.得到所有元素的最小值
代码如下:
struct VeniceSet {
multiset<int> S;
int water_level = 0;
void add(int v) {
S.insert(v + water_level);
}
void remove(int v) {
S.erase(S.find(v + water_level));
}
void updateAll(int v) {
water_level += v;
}
int getMin() {
return *S.begin() - water_level;
}
int size() {
return S.size();
}
};
例题传送门:
第一题:cf2400
第二题:cf2000