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;
}
相关推荐
吴可可1232 分钟前
AutoCAD2016二次开发环境配置指南
算法·机器学习
Thomas_YXQ3 分钟前
Unity3D Addressable 深度优化热更性能消耗
开发语言·3d·unity·微信
一条大祥脚5 分钟前
ABC461 枚举|扫描线|动态前缀和|数论|dfs枚举子集
算法·深度优先
aini_lovee7 分钟前
C# 快递单打印系统(万能套打系统)
开发语言·c#
计算机安禾9 分钟前
【数据库系统原理】第14篇:关系模式的语义约束:函数依赖的公理系统与闭包计算
人工智能·算法·机器学习
MZZ骏马9 分钟前
C++ 极简模式的日志
c++
量化君也10 分钟前
快速入门量化交易都要学些什么?
大数据·人工智能·python·算法·金融
天启HTTP12 分钟前
开启全局代理后网络变慢,问题出在哪
开发语言·前端·网络·tcp/ip·php
丑过三八线16 分钟前
Runc 深度解析:从原理到实操
java·linux·开发语言·docker·容器·rpc