TLE #11 MLE #12求助
查看原帖
TLE #11 MLE #12求助
716260
SegmentTree_楼主2023/11/29 19:35
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+1;
#define lid (id << 1)
#define rid (id << 1 | 1)
struct node{
	int l, r;
	int maxx, lazy;
};
struct segment{
	node tr[N << 2];
	void pushup(int id){
		tr[id].maxx = max(tr[lid].maxx, tr[rid].maxx);
	}
	void pushdown(int id){
		if (tr[id].lazy != -1){
			tr[lid].maxx = tr[id].lazy;
            tr[rid].maxx = tr[id].lazy;
			tr[lid].lazy = tr[id].lazy;
			tr[rid].lazy = tr[id].lazy;
            tr[id].lazy = -1;
		}
	}
	void build(int id, int l, int r, int val){
		tr[id].l = l;
		tr[id].r = r;
		tr[id].lazy = -1;
		if (l >= r){
			tr[id].maxx = val;
			return;
		}
		int mid = (tr[id].l + tr[id].r) / 2;
		build(lid, l, mid, val);
		build(rid, mid + 1, r, val);
		pushup(id);
	}
	void modify(int id, int l, int r, int val){
		//cout << '!';
		if (l <= tr[id].l && tr[id].r <= r){
			tr[id].maxx = val;
			tr[id].lazy = val;
			return;
		}
		pushdown(id);
		int mid = (tr[id].l + tr[id].r) >> 1;
		if (r <= mid) modify(lid, l, r, val);
		else if (l > mid) modify(rid, l, r, val);
		else modify(lid, l, mid, val), modify(rid, mid + 1, r, val);
		pushup(id);
	}
	int query(int id, int l, int r){
		if (l <= tr[id].l && tr[id].r <= r) return tr[id].maxx;
		pushdown(id);
		int mid = (tr[id].l + tr[id].r) >> 1;
		if (r <= mid) return query(lid, l, r);
		else if (l > mid) return query(rid, l, r);
		else return max(query(lid, l, mid), query(rid, mid + 1, r));
	}
}color[31];
int n, t, q, l, r, c;
char op;
int main(){
	ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
	cin >> n >> t >> q;
	color[1].build(1, 1, n, 1);
	for (int i = 2;i <= t;i++) color[i].build(1, 1, n, 0);
	while (q--){
		cin >> op >> l >> r;
		if (l > r) swap(l, r);
		if (op == 'C'){
			cin >> c;
			for (int i = 1;i <= t;i++){
				if (i == c) color[i].modify(1, l, r, 1);
				else color[i].modify(1, l, r, 0);
			}
		}
		if (op == 'P'){
			int ans = 0;
            for (int i = 1;i <= t;i++){
                if(color[i].query(1, l, r)) ++ans;
        	}
            cout << ans << '\n';
		}
	}
 	return 0;
}
2023/11/29 19:35
加载中...