社区讨论
珂朵莉树九十分求条
P4979矿洞:坍塌参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mhpi7u3n
- 此快照首次捕获于
- 2025/11/08 07:46 4 个月前
- 此快照最后确认于
- 2025/11/08 07:46 4 个月前
只 第 个
CPP#include<bits/stdc++.h>
#define ll long long
using namespace std;
template<typename TY>
inline void read(TY &s){
ll x = 0,f = 1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
s = x * f;
}
int n,k;
struct node{
int l,r;
mutable int val;
bool operator<(const node &d)const{
return l < d.l;
}
};
set<node> se;
auto split(int x){
auto it = se.lower_bound({x,0,0});
if(it != se.end() && it->l == x) return it;
it--;
int l = it->l,r = it->r,val = it->val;
se.erase(it);
se.insert({l,x-1,val});
return se.insert({x,r,val}).first;
}
inline void assign(int l,int r,int v){
auto itl = prev(se.upper_bound({l,0,0})),itr = prev(se.upper_bound({r,0,0}));
if(itr->val == v){
r = itr->r,itr = next(itr);
}
else{
itr = split(r+1);
}
if(itl->val == v){
l = itl->l;
}
else itl = split(l);
se.erase(itl,itr);
se.insert({l,r,v});
}
inline bool query(int l,int r){
auto itl = prev(se.upper_bound({l,0,0})),itr = prev(se.upper_bound({r,0,0}));
if(itl != itr) return false;
if(l == 1 || r == n) return true;
auto it_l = prev(se.upper_bound({l-1,0,0})),it_r = prev(se.upper_bound({r+1,0,0}));
// cerr << l - 1 << " " << r + 1 << " " << it_l->val << " what? " << it_r->val << "\n";
if(it_l->val == it_r->val) return false;
return true;
}
int main(){
read(n);
string s;
cin >> s;
int l = 1, r = 1,v = (s[0]-'A') + 1;
for(int i=1;i<s.size();i++){
if((s[i] - 'A') + 1 == v) r++;
else{
// cerr << s[i] << " ";
// cerr << l << " " << r << " " << v << "?\n";
se.insert({l,r,v});
r++; l = r; v = (s[i]-'A') + 1;
}
}
se.insert({l,r,v});
se.insert({n+1,n+1,0});
se.insert({0,0,0});
// cerr << l << " " << r << " " << v << "?\n";
int q;
read(q);
char opt,ch;
while(q--){
cin >> opt; read(l); read(r);
if(opt == 'A'){
cin >> ch;
v = (ch - 'A') + 1;
assign(l,r,v);
}
else{
if(query(l,r)) cout << "Yes\n";
else cout << "No\n";
}
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...