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 变换区间就在这两个之间

相关推荐
lingchen19064 分钟前
多项式的积分
算法
1白天的黑夜115 分钟前
递归-21.合并两个有序链表-力扣(LeetCode)
c++·leetcode·链表·递归
adny-code18 分钟前
[fastgrind] 一个轻量级C++内存监控及可视化开源库
c++·内存·性能分析·高性能计算
坚持编程的菜鸟22 分钟前
LeetCode每日一题——在区间范围内统计奇数数目
c语言·算法·leetcode
进击的圆儿38 分钟前
分治算法_快速排序专题总结-----分治
算法·排序算法·分治·快排·大根堆·小根堆
前进之路91 小时前
Leetcode每日一练--35
算法·leetcode
董建光d1 小时前
【深度学习】目标检测全解析:定义、数据集、评估指标与主流算法
深度学习·算法·目标检测
郝学胜-神的一滴1 小时前
Linux系统函数link、unlink与dentry的关系及使用注意事项
linux·运维·服务器·开发语言·前端·c++
赵杰伦cpp1 小时前
list的迭代器
开发语言·数据结构·c++·算法·链表·list
~~李木子~~1 小时前
机器学习集成算法实践:装袋法与提升法对比分析
人工智能·算法·机器学习