B 为什么r为2m时可以过,m+1时不行,题意不是限制最大顺子尾巴为m吗

#include <bits/stdc++.h>
using namespace std;
typedef long long i64;
typedef unsigned long long u64;
typedef long long ll;
//const int MOD = 1e9 + 7;
const int MOD = 998244353;
int _t = 1;
void solve() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    ll n, m, k;
    cin >> n >> m >> k;
    set <ll> vis;
    while(n--) {
        ll x;
        cin >> x;
        vis.insert(x);
    }
    vector <ll> a(vis.begin(),vis.end());
    ll res = 1;
    for(int i = 0;i < a.size(); ++ i) {
        ll l = a[i],r = 2*m;
        while(l < r) {
            ll mid = l + r >> 1;
            int j = upper_bound(a.begin(),a.end(),mid)-a.begin();
            if(mid-a[i]+1 <= k + j - i) l = mid + 1;
            else r = mid;
        }
        res = max(res,min(m,l-a[i]));
    }
    cout << res;
}
signed main() {
    //cin >> _t;
    while(_t--) {
        solve();
    }  
    return 0;
}

全部评论

相关推荐

07-09 20:50
门头沟学院 Java
码农索隆:1.教育背景和荣誉证书合二为一。 2.获奖项目理一遍,你做了什么,对你求职的岗位有什么帮助,没有就删掉。 3.技能特长和教育背景交换位置。 4.技能特长写的太差,上网上找简历参考。都不用问你别的,一个redis就能把你问住,写写你具体会redis哪些方面的知识。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务