题解 | #二分#

二分

https://ac.nowcoder.com/acm/problem/207053

二分 (nowcoder.com)

问题描述:根据对话,找可能的最多正确的对话。

思路:

​ 如果是 val +,说明猜的数val比答案要大,此时,答案在区间(-inf, val)

​ 如果是val -,说明猜的数val比答案要小,此时,答案在区间(val, inf)

​ 如果是val .,说明猜的数val等于答案,此时,答案在区间[val, val + 1)

​ 可以用差分求最大覆盖区间。数据离散,可以用map代替差分离散化。

代码:

void solve() {
    LL inf = LONG_LONG_MAX - 123456789;
    int n; cin>>n;
    map<LL,LL> mll;
    char op[2];
    rep(i,1,n) {
        int v; cin>>v>>op;
        if(op[0] == '.') { // 等于 [val, val + 1)
            mll[v]++, mll[v+1]--;
        }
        else if(op[0] == '+') { // 大 (-inf, v)
            mll[-inf]++;
            mll[v]--; 
        } else { // 小 (v+1, inf)
            mll[v+1]++;
            mll[inf]--;
        }
    }
    int ans = 0, sum = 0;
    for(auto t: mll) {
        sum += t.vs;
        ans = max(sum, ans);
    }
    cout<<ans;
}
全部评论

相关推荐

02-13 15:16
三江学院 运营
据说名字越长别人越关注你的昵称我觉得我要被关注了:完全看不出你到底干了什么 全是车轱辘话
点赞 评论 收藏
分享
北斗导航Compass低仿版:学历一般 没实习 非科班,肯定很难过初筛了,先找个中小厂好好干吧,拿这段实习去投大厂实习
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务