您的位置:首页 > 其它

Codeforces 567B Berland National Library

2015-08-07 11:03 309 查看
题目链接:
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: