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

相关推荐
铅笔小新z7 小时前
【数据结构】栈和队列
数据结构
神仙别闹7 小时前
基于C++ MFC 实现的智慧公交系统
开发语言·c++·mfc
张宇Joaquin7 小时前
鲲鹏统一并行加速库KUPL--异步数据拷贝
线性代数·算法·矩阵·numpy
GlobalInfo7 小时前
创新不是追逐热点,是在变化中建立长期竞争力
大数据·算法
lvwangshu7 小时前
线性代数基础 Linear Algebra Basics
数学·算法
dear_bi_MyOnly7 小时前
函数模块化:企业级项目高效之道
c++·后端·学习
码匠许师傅7 小时前
【设计模式精讲】13.装饰器模式(Decorator)
c++·设计模式·uml·装饰器模式
ZhouDevin8 小时前
算法论文/数据集5——AlignPrune(CVPR2026)基于样本损失时间序列精确识别噪声样本
算法
OPEN-F8 小时前
C++综合实战:面向对象图书管理系统
开发语言·c++
十铭忘8 小时前
HMM(隐马尔可夫模型)的理解7——Baum–Welch 算法
人工智能·算法