经过测试,我的代码问题出现在 A 操作。
而在测试过程中,随机性的会出现Segmentation Fault 11.
请问这可能是什么原因所导致的?
#include<iostream>
#include<cstring>
#include<climits>
#include<algorithm>
#include<map>
#include<set>
#include<vector>
#define Iter set<node>::iterator
using namespace std;
void prepare() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
}
const int maxn = 1e7+5;
int n, m;
int a[maxn];
struct node {
int l,r;
mutable int v;
node(int L,int R,int V):l(L),r(R),v(V){}
node(int L): l(L){}
bool operator < (const node & o) const {
return l < o.l;
}
};
set<node> s;
Iter split (int pos) {
Iter it = s.lower_bound(node(pos));
if (it!=s.end() && it->l==pos) return it;
it--;
int l = it->l;
int r = it->r;
int v = it->v;
s.erase(it);
s.insert(node(l,pos-1,v));
return s.insert(node(pos,r,v)).first;
}
void assign (int l, int r, int v) {
Iter left = split(l);
Iter right = split(r+1);
s.erase(left,right);
s.insert(node(l,r,v));
}
bool query (int l, int r) {
Iter left = split(l);
Iter right = split(r+1);
int color = left->v;
for (Iter it=left;it!=right;it++) {
if (it->v!=color) return false;
}
if (l==1||r==n) return true;
left--;
return left->v!=right->v;
}
int main () {
prepare();
cin>>n;
for (int i=1;i<=n;i++) {
char c;
cin>>c;
a[i] = c-'A'+1;
}
for (int i=1;i<=n;i++) {
int cur = i;
while (i<=n && a[i]==a[cur]) i++;
s.insert(node(cur,--i,a[cur]));
}
cin>>m;
for (int i=1;i<=m;i++) {
char opt;
cin>>opt;
if (opt=='A') {
int x,y;
char op;
cin>>x>>y>>op;
assign(x,y,(int)(op-'A'+1));
cout<<1<<endl; // test
}
if (opt=='B') {
int x,y;
cin>>x>>y;
bool ans = query(x,y);
if (ans) cout<<"Yes"<<"\n";
else cout<<"No"<<"\n";
}
}
return 0;
}