珂朵莉树MLE
查看原帖
珂朵莉树MLE
131337
chenyuxuan02楼主2021/8/29 09:53

前三个点A了,之后的都MLE了,有人能帮忙调一调吗

#include<bits/stdc++.h>
using namespace std;
#define int long long
struct node{
	int l, r;
	mutable int v;
	bool operator <(const node &q)const{
		return l < q.l;
	}
};
#define snit set<node>::iterator
set < node > st;
int n, q;

snit split(int pos){
	snit it = st.lower_bound({pos, -1, 0});
    if(it != st.end() && it -> l == pos) return it;
	it --;
	int l = it -> l, r = it -> r, v = it -> v;
	st.erase(it);
	st.insert({l, pos - 1, v});
	return st.insert({pos, r, v}).first;
}

void mul(int l, int r, int a, int b){
	snit itr = split(r + 1), itl = split(l);
	for(snit it = itl; it != itr; it ++)
	    it -> v = ((it -> r - l + 1) * a) % b;
	return ;
}

int sum(int l, int r){
	snit itr = split(r + 1), itl = split(l);
	int s = 0;
	for(snit it = itl; it != itr; it ++)
	    s += it -> v;
	return s;
}

signed main(){
	cin >> n >> q;
	for(int i = 1; i <= n + 1; i ++){
		st.insert({i, i, 0});
	}
	for(int i = 1; i <= q; i ++){
		int opt, l, r, a, b;
		cin >> opt >> l >> r;
		if(opt == 1){
			cin >> a >> b;
			mul(l, r, a, b);
		}
		else cout << sum(l, r) << endl;
	}
	return 0;
}
2021/8/29 09:53
加载中...