POJ2777【线段树】

news/2025/2/14 0:53:35/

一直以来就是这么写,很稳。
大晚上先贴个代码吧,下次给加注释。

const int Maxn = 1e5 + 10;struct Seg{int Left, Right;int col;int _col;
}node[Maxn<<2];void pushUp(int num){node[num].col = node[num<<1].col|node[num<<1|1].col;
}
void pushDown(int num){if(node[num]._col){node[num<<1].col = node[num<<1|1].col = (1<<node[num]._col);node[num<<1]._col = node[num<<1|1]._col = node[num]._col;node[num]._col = 0;}
}void Build(int num, int Left, int Right){node[num].Left = Left;node[num].Right = Right;node[num]._col = 0;if(Left == Right){node[num].col = (1<<1);return;}int Mid = (node[num].Left + node[num].Right) >> 1;Build(num<<1, Left, Mid);Build(num<<1|1, Mid+1, Right);pushUp(num);
}void update(int num, int s, int t, int col){if(node[num].Left >= s && node[num].Right <= t){node[num].col = (1<<col);node[num]._col = col;return;}pushDown(num);int Mid = (node[num].Left + node[num].Right) >> 1;if(Mid >= t) update(num<<1, s, t, col);else if(Mid < s) update(num<<1|1, s, t, col);else{update(num<<1, s, Mid, col);update(num<<1|1, Mid+1, t, col);}pushUp(num);
}int query(int num, int s, int t){if(node[num].Left >= s && node[num].Right <= t)return node[num].col;pushDown(num);int Mid = (node[num].Left + node[num].Right) >> 1;if(Mid >= t) return query(num<<1, s, t);else if(Mid < s) return query(num<<1|1, s, t);else{int x = query(num<<1, s, Mid);int y = query(num<<1|1, Mid+1, t);return x|y;}
}
int solve(int s, int t, int T){int col = query(1, s, t);int num = 0;for(int i=1;i<=T;i++){if(col & (1<<i)) num++;}return num;
}int main(){char op[5];int n, T, q;int s, t, col;scanf("%d%d%d", &n, &T, &q);Build(1, 1, n);for(int i=1;i<=q;i++){scanf("%s", op);if(op[0] == 'C'){scanf("%d%d%d", &s, &t, &col);if(s > t) swap(s, t);update(1, s, t, col);}else{scanf("%d%d", &s, &t);if(s > t) swap(s, t);printf("%d\n", solve(s, t, T));}}return 0;
}

http://www.ppmy.cn/news/491715.html

相关文章

POJ 2777 Count Color

题目链接&#xff1a;http://poj.org/problem?id2777 解题思路&#xff1a;比较巧妙&#xff0c;状态压缩----最多三十种颜色&#xff0c;每一位表示每个颜色状态&#xff0c;那么使用逻辑或运算即可避免颜色重复计算的问题&#xff0c;统计颜色的时候判断1的位数即可。 延迟标…

POJ2777 Count Color

题意&#xff1a; 一段区间从1-n的初始颜色为1&#xff0c;每次进行两种操作 1&#xff0c;C a b c 把[a,b]这个区间染成颜色c。 2&#xff0c;P a b查询[a,b]区间内有多少种颜色。 思路&#xff1a; 首先题目保证染色的颜色数少于30种这是关键。我们需要将30种颜色的有无与…

线段树进阶-染色问题 附poj-2777题解

区域染色覆盖问题 假设某大学有一面文化墙&#xff0c;各个学院都可以在上面涂色&#xff0c;要求涂色区域高必须和墙一样&#xff0c;宽度任意但必须是整数&#xff08;以米为单位&#xff09;。涂色可以覆盖其他学院的涂色。现在若干个学院涂色之后最终这面墙上能看见多少种颜…

poj 2777 Count 线段树区间覆盖

http://poj.org/problem?id2777 跟贴报纸差不多&#xff0c;还不用离散化。 本身木棍的颜色是0&#xff0c;也算一种颜色&#xff0c;给木棍涂颜色&#xff0c;颜色用数字代替是1~30&#xff0c;不过是随时询问&#xff0c;不像贴报纸就问一次。 这个就要注意效率&#xff0c;…

洛谷P2777

玄学题&#xff0c;一开始我居然看成了单调队列,emmmm 贪心&#xff1a;每个人的最优的分时a[i]n; 其余要想他得到冠军&#xff0c;就要比他高分的人获得的最大得分是a[i]n,要让初始分数最高的人拿到最低的排名&#xff0c;证明只可意会不可言传&#xff0c;OI贪心就是比较玄学…

linux更改文件特殊权限,Linux特殊文件权限(chmod) chmod2777

一般来说,使用过Linux的同学都知道,Linux文件的权限有rwx,所有者、所有组、其它用户的rwx权限是彼此独立的。为此,经常会听到如果某个web文件需要被修改的话,需要加上777的权限,这就是让所有用户可写。 但仔细一想,这样的权限未免有些想得比较天真,没有考滤特殊情况。例…

poj 2777

题意&#xff1a;1给区间染色 2问区间有多少颜色 #include<iostream> using namespace std; struct Node {int x;//区间覆盖颜色int end;int L,R;Node *Right,*Left; }; Node Tree[1200100]; int nCount; void Build(Node *root,int l,int r) {root->x1;//初始颜色roo…

poj2777

poj2777区间修改&#xff0c;区间查询mark-1表示这个区间有多种颜色&#xff0c;否则就1种 #include<iostream> #include<cstdio> #include<queue> #include<algorithm> #include<cmath> #include<ctime> #include<set> #include<…