ABC341

E

link

这个题目中所说的好的其实就是像010101这样一个0,一个1的字符串。
那么不好的就是两个0或两个1在一起,所以判断一个区间好不好只需要判断一个区间内有没有两个0或两个1在一起,那么我们可以把两个0或两个1在一起的位置存下来。
先考虑查询操作。
我们只需要判断lr之间有没有两个0或两个1在一起,如果所存的位置是升序的,可以直接用二分来做,于是想到了set
再考虑修改。
其实修改就是开头和结尾会改变,那么如果原来的开头是好的(set里没有),那么会变成坏的,反之亦然。结尾也一样。

点击查看代码
#include<bits/stdc++.h>

#define int long long

using namespace std;

int n,q;
char s[500005];
set<int> st;

signed main(){
	
	cin >> n >> q;
	cin >> s+1;
	
	for(int i = 2;i <= n;++ i)
		if(s[i] == s[i-1]) st.insert(i);
	
	while(q--){
		
		int op,l,r;
		cin >> op >> l >> r;
		
		if(op == 1){
			if(l > 1){
				if(st.count(l)){
					st.erase(l);
				}
				else st.insert(l);
			}
			if(r < n){
				if(st.count(r+1)){
					st.erase(r+1);
				}
				else st.insert(r+1);
			}
		}
		
		if(op == 2){
			auto it = st.upper_bound(l);
			if(it == st.end()||*it > r){
				cout << "Yes\n";
			}
			else cout << "No\n";
		}
		
	}
	
	return 0;
	
}
posted @   不认命,就是哪吒的命!  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示