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);
    } 
}

 

posted @ 2020-04-03 14:19  zlc0405  阅读(127)  评论(0编辑  收藏  举报