Venice Technique

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

猜你喜欢

转载自blog.csdn.net/weixin_43353639/article/details/114401832