题意:在1到m的数字中满足 x-3或x+3 在 牌河中出现的数字个数
题解:定义一个数组a[N],来统计数字x出现的次数。定义sum表示不重复数字的个数。
每往牌河中添加一个数字,a[x-3]++ , a[x+3]++。如果a[x-3]==0,那么sum++;a[x+3]同理。
每在牌河中删除一个数组,a[x-3]-- , a[x+3]--。如果a[x-3]==0,那么sum--;a[x+3]同理。
代码
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <queue>
#include <math.h>
#include <string>
#include <set>
#define PI 3.14159
using namespace std;
typedef pair<int,int> PII;
typedef long long LL;
const int MAX_INT = 0x3f3f3f3f;
const int N = 1e5+15;
const int mod = 1e9+7;
int a[N];
void solve()
{
int m,q;
cin>>m>>q;
int sum = 0;
while(q--)
{
int op,num;
cin>>op>>num;
if(op==1)
{
int x = num - 3;
int y = num + 3;
if(x>=1)
{
if(a[x]==0)sum++;
a[x]++;
}
if(y<=m)
{
if(a[y]==0)sum++;
a[y]++;
}
}
else
{
int x = num - 3;
int y = num + 3;
if(x>=1)
{
a[x]--;
if(a[x]==0)sum--;
}
if(y<=m)
{
a[y]--;
if(a[y]==0)sum--;
}
}
cout<<sum<<endl;
}
}
int main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int T = 1;
while(T--)
{
solve();
}
}