题解:AT_abc470_c [ABC470C] Inc, Dec, Xor
priority_queue1 · · 题解
个人感觉 C 是妙妙题。
首先,肯定不能每次修改之后
来看查询
考虑用一个数据结构来维护所有需要修改的值。发现删除与插入十分频繁,所以我们可以使用链表维护所有大于等于
整体我们用一个变量维护异或和。那么代码易得。
#include <iostream>
#include <list>
int n,a[500005]={},vis[500005],cnt=0,q;
int main(){
std::list<int> lst;
std::cin >> n >> q;
while(q--){
int op;
std::cin >> op;
if(op==1){
int x;
std::cin >> x;
int t=a[x];
a[x]++;
cnt^=t;
cnt^=a[x];
if(t==0){
lst.push_back(x);
}
}else{
for(auto i=lst.begin();i!=lst.end();){
int t=a[*i];
a[*i]--;
cnt^=t;
cnt^=a[*i];
if(!a[*i])i=lst.erase(i);
else i++;
}
}std::cout << cnt << "\n";
}
return 0;
}
总复杂度