G:一开始以为又是前后缀维护问题,赛后调出来是二分(蒟蒻的题解)

#include<bits/stdc++.h>

#define lc p << 1
#define rc p << 1 | 1
#define lowbit(x) x & -x
#define inv(x) qmi(x, P - 2)

using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef __int128 lll;
typedef pair<int,int> pii;
typedef pair<double,double> pdd;
typedef pair<ll,ll> pll;
const int N = 2e5 + 10;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f;
const double PI = 3.141592653;
const ll P = 1e9 + 7;

int T = 1;
ll qmi(ll a, ll b){
    ll res = 1;
    while(b){
        if(b & 1) res = res * a % P;
        b >>= 1;
        a = a * a % P;
    }
    return res;
}
ll gcd(ll a, ll b){
    return b ? gcd(b, a % b) : a;
}
void print_lll(lll x){
    if(!x) cout << 0 << '\n';
    else{
        vector<int> nums;
        while(x) nums.push_back(x % 10), x /= 10;
        for(int i = 0; i < nums.size(); i ++) cout << nums[i];
    }
}

void print(vector<ll> a, int n){
    for(int i = 0; i < n; i ++){
        if(i < n - 1) cout << a[i] << ' ';
        else cout << a[i];
    }
}

void solve(){
    int n;
    cin >> n;
    string s;
    cin >> s;
    s = " " + s;
    vector<int> pre(n + 10), last(n + 10);
    for(int i = 1; i <= n; i ++){
        if(s[i - 1] == '3') pre[i] = i - 1;
        else pre[i] = pre[i - 1];
    }

    function<int(int)> check = [&](int mid){
        for(int i = 1; i + mid <= n; i ++){
            int r = i + mid;
            if(s[i] == '3'){
                if(s[r] == '3') return 1;
                else{
                    if(pre[r] > i) return 1;
                }
            }
            else{
                if(s[r] == '3' && pre[i]) return 1;
                if(s[r] == '8' && pre[i]) return 1;
            }
        }  
        return 0;
    };
    
    int l = 0, r = n;
    while(l < r){
        int mid = l + r + 1 >> 1;
        if(check(mid)) l = mid;
        else r = mid - 1;
    }
    cout << l << '\n';
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);

    //cin >> T;
    while(T --){
        solve();
    }
    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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