Codeforces 567B Berland National Library

题目链接:

http://codeforces.com/contest/567/problem/B

官方题解:

To answer the queries correct, we need to know if the person is still in the library. For that purpose we will use in array of type bool. Also we will store two variables for the answer and ''current state'' (it will store the current number of people in the library). Let's call them ansand state respectively.

Thus, if we are given query  + ai then we should increase state by one, mark that this person entered the library (in[ai] = true) and try to update the answer (ans = max(ans, state)).

Otherwise we are given  - ai query. If the person who leaves the library, was in there, we should just decrease state by one. Otherwise, if this person was not in the library (in[ai] == false) and leaves now, he entered the library before we started counting. It means we should increase the answer by one anyway. Also one should not forget that it is needed to mark that the person has left the library (in[ai] = false).

AC代码:

#include <iostream>
#include <cstdio>
#include <set>
#include <algorithm>
using namespace std;

set<int> s;

int main(){
    int n;
    while(~scanf("%d",&n)){
        int maxn = 0;
        char op;
        int x;
        s.clear();
        for(int i = 0; i < n; i++){
            getchar();
            scanf("%c%d",&op,&x);
            if(op == '+'){
                s.insert(x);
                int t = s.size();
                maxn = max(maxn,t);
            }
            else{
                if(s.find(x) != s.end())
                    s.erase(s.find(x));
                else{
                    maxn++;
                    //cout<<maxn<<endl;
                }
            }
        }
        printf("%d\n",maxn);
    }
    return 0;
}



你可能感兴趣的:(set)