1600*C. Binary String Copying

https://codeforces.com/problemset/problem/1849/C

Binary String Copying - 洛谷

解析:

对于某个区间x,y,他排序之后,最左侧的连续0和最右侧的连续1是不影响排序结果的。

假设左侧连续a个0,右侧b个1,那么对于 [x,y]排序,和对于[x+a,y-b]排序是一样的。

所以我们记录每个位置最近的右侧1的坐标和最左侧的0的坐标,每次将范围映射到更小的唯一区间里里面即可。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;
int t,n,m,a[N],l[N],r[N],k;
int main(){
	scanf("%d",&t);
	while(t--){
		scanf("%d%d",&n,&m);
		k=0;
		for(int i=1;i<=n;i++){
			scanf("%1d",&a[i]);
			if(a[i]==0) k=i;
			l[i]=k;
		}
		k=n+1;
		for(int i=n;i>=1;i--){
			if(a[i]==1) k=i;
			r[i]=k;
		}
		set<pair<int,int>>res;
		for(int i=1;i<=m;i++){
			int x,y;
			scanf("%d%d",&x,&y);
			x=r[x];
			y=l[y];
			if(x>y) x=1,y=1;
			res.insert({x,y});
		}
		printf("%d\n",res.size());
	}
	return 0;
}
相关推荐
No0d1es5 分钟前
2025年12月 GESP CCF编程能力等级认证C++四级真题
算法·青少年编程·等级考试·gesp·ccf
汉克老师6 分钟前
GESP2025年12月认证C++八级真题与解析(单选题10-12)
c++·递归··gesp八级·gesp8级
lly20240613 分钟前
jEasyUI 设置排序指南
开发语言
CodeByV22 分钟前
【算法题】快排
算法
一起努力啊~24 分钟前
算法刷题--长度最小的子数组
开发语言·数据结构·算法·leetcode
rchmin29 分钟前
限流算法:令牌桶与漏桶详解
算法·限流
小北方城市网29 分钟前
第1课:架构设计核心认知|从0建立架构思维(架构系列入门课)
大数据·网络·数据结构·python·架构·数据库架构
leoufung36 分钟前
LeetCode 221:Maximal Square 动态规划详解
算法·leetcode·动态规划
黑符石38 分钟前
【论文研读】Madgwick 姿态滤波算法报告总结
人工智能·算法·机器学习·imu·惯性动捕·madgwick·姿态滤波
源代码•宸40 分钟前
Leetcode—39. 组合总和【中等】
经验分享·算法·leetcode·golang·sort·slices