0pts hack数据过了,求调
  • 板块P1558 色板游戏
  • 楼主lw393
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/16 10:28
  • 上次更新2024/8/16 12:06:12
查看原帖
0pts hack数据过了,求调
1033990
lw393楼主2024/8/16 10:28
#include<iostream>
#include<cstdint>
#include<cmath>
using namespace std;
const int N = 1e5 + 5;
#define int long long

struct node{
	int l, r;
	int color;
	int tag;
}tree[N << 2];

void pushup(int k){
	int lc = k * 2;
	int rc = k * 2 + 1;
	tree[k].color = tree[lc].color | tree[rc].color;
}

void add_tag(int k, int v){
	tree[k].tag = v;
	tree[k].color = v;
}

void pushdown(int k){
	int lc = k * 2;
	int rc = k * 2 + 1;
	if(tree[k].tag){
		add_tag(lc, tree[k].tag);
		add_tag(rc, tree[k].tag);
		tree[k].tag = 0;
	}
}

void build(int k, int l, int r){
	tree[k].l = l, tree[k].r = r;
	if(l == r){
		tree[k].color = 1;
		return;
	}
	int mid = (l + r) >> 1;
	int lc = k * 2;
	int rc = k * 2 + 1;
	build(lc, l, mid);
	build(rc, mid + 1, r);
	pushup(k);
}

void modify(int k, int l, int r, int c){
	if(tree[k].l >= l && tree[k].r <= r){
		add_tag(k, c);
		return;
	}
	pushdown(k);
	int mid = (tree[k].l + tree[k].r) >> 1;
	int lc = k * 2;
	int rc = k * 2 + 1;
	if(r <= mid) modify(lc, l, r, c);
	else if(l > mid) modify(rc, l, r, c);
	else modify(lc, l, mid, c), modify(rc, mid + 1, r, c);
	pushup(k);
}

int query(int k, int l, int r){
	if(tree[k].l >= l && tree[k].r <= r){
		return tree[k].color;
	} 
	pushdown(k);
	int mid = (tree[k].l + tree[k].r) >> 1;
	int lc = k * 2;
	int rc = k * 2 + 1;
	if(r <= mid) return query(lc, l, r);
	else if(l > mid) return query(rc, l, r);
	else return query(lc, l, mid) | query(rc, mid + 1, r);
}

void solve(){
	int n, t, o;
	cin >> n >> t >> o;
	build(1, 1, n);
	for(int i = 1; i <= o; i++){
		char op;
		int l, r;
		cin >> op >> l >> r;
		if(op == 'C'){
			int c;
			cin >> c;
			modify(1, l, r, 1 << c - 1);
		}else{
			int color = query(1, l, r);
			int ans = 0;
			while(color){
				if(color & 1) ans++;
				color >>= 1;
			}
			cout << ans << '\n';
		}
	}
}

signed main(){
	int t = 1;
	//cin >> t;
	while(t--){
		solve();
	}
	return 0;
}

2024/8/16 10:28
加载中...