div 2 c Binary String Copying

cpp 复制代码
#include<bits/stdc++.h>
using namespace std ;
using ll = long long;
using PII = pair<int,int>;
string s;
void solve(){
    int n,m;
    cin >> n >> m;
    //vector<int>s(n+1);
    vector<int>ne1(n+2,n+1);
    vector<int>pre0(n+2,0);
    cin>>s;
    s = " " + s;
    for(int i=1;i<=n;i++){
        pre0[i] = pre0[i-1];
        if(s[i] == '0'){
            pre0[i] = i;
        }
    }
    for(int i=n;i>=1;i--){
        ne1[i] = ne1[i+1];
        if(s[i] == '1'){
            ne1[i] = i;
        }
    }
    set<PII> s;
    while(m--){
        int l,r;
        cin>>l>>r;
        //cout<<ne1[l]<<" "<<pre0[r]<<endl;
        if(ne1[l] > pre0[r]){
            s.emplace(-1,-1);
        }else{
            s.emplace(ne1[l],pre0[r]);
        }
    }
    cout<<s.size();

}



int main(){
    int t;
    cin>>t;
    while(t--){
        solve();
        puts("");
    }
}

用最小的变换区间代表整个大区间

找到L右边最近的1 R左边最近的0 变换区间就在这两个之间

相关推荐
laocooon52385788616 小时前
C++中的安全指针(智能指针)
开发语言·c++
中國龍在廣州16 小时前
“太空数据中心”成AI必争之地?
人工智能·深度学习·算法·机器学习·机器人
做怪小疯子16 小时前
LeetCode 热题 100——图论——岛屿数量&腐烂的橘子&课程表
算法·leetcode·图论
yuuki23323316 小时前
【C++】模板初阶
java·开发语言·c++
dyxal16 小时前
决策树:让机器像人类一样做选择的“思维导图”
算法·决策树·机器学习
LYFlied16 小时前
【每日算法】LeetCode148. 排序链表
前端·数据结构·算法·leetcode·链表
长安er16 小时前
LeetCode198打家劫舍:从回溯到动态规划的优化历程
算法·leetcode·动态规划·回溯·打家劫舍
代码游侠16 小时前
学习笔记——线程
linux·运维·开发语言·笔记·学习·算法
努力努力再努力wz16 小时前
【Linux网络系列】:网络+网络编程(UDPsocket+TCPsocket)
java·linux·c语言·开发语言·数据结构·c++·centos
又是忙碌的一天16 小时前
八大排序之:冒泡排序、快速排序和堆排序
数据结构·算法·排序算法