CF1294D MEX maxiszing
题意:
一个序列的MEX值定义为这个序列里最小的没有出现的非负数。
给出q和x,q表示询问数,每次询问插入一个数,x表示你可以对序列中任何一个数做无限次+x和-x的操作,使得当前序列的MEX最大
请输出每次询问后序列MEX的最大值
题解:
定义一个map保存可以通过操作达到当前值的数的个数
除x的余数相同的数,可以通过操作抵达,利用这一点可以仅遍历一轮算出答案
思维还是太差了...刷满200题会不会好一点...
#include<bits/stdc++.h> using namespace std; unordered_map<int,int> pos; int main () { int q,x; scanf("%d%d",&q,&x); int ans=0; for (int i=0;i<q;i++) { int y; scanf("%d",&y); pos[y%x]++; while (pos[ans%x]>=1) { pos[ans%x]--; ans++; } printf("%d\n",ans); } }