珂朵莉树 本地测试随机性RE
查看原帖
珂朵莉树 本地测试随机性RE
320309
KarL05楼主2020/8/6 19:49

经过测试,我的代码问题出现在 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;
}
2020/8/6 19:49
加载中...