CDOJ 1259 昊昊爱运动 II 线段树+bitset
昊昊爱运动 II
昊昊喜欢运动
他N天内会参加M种运动(每种运动用一个[1,m]的整数表示)
现在有Q个操作,操作描述如下
- 昊昊把第l天到第r天的运动全部换成了x(x∈[1,m])
- 问昊昊第l天到第r天参加了多少种不同的运动
Input
输入两个数N, M (1≤N≤105, 1≤M≤100);
输入N个数ai(ai∈[1,m])表示在第i天昊昊做了第ai类型的运动;
输入一个数Q(1≤Q≤105);
输入Q行 每行描述以下两种操作
- 形如
M l r x
,表示昊昊把第l天到第r天的运动全部换成了x(x∈[1,m]) - 形如
Q l r
,表示昊昊想知道他第l天到第r天参加了多少种不同的运动
Output
对于所有的Q操作,每一行输出一个数 表示昊昊在第l天到第r天一共做了多少种活动
Sample input and output
Sample Input | Sample Output |
---|---|
|
|
Source
题解:线段树+bitset
- //meek///#include<bits/stdc++.h>
- #include <cstdio>
- #include <cmath>
- #include <cstring>
- #include <algorithm>
- #include<iostream>
- #include<bitset>
- using namespace std ;
- #define mem(a) memset(a,0,sizeof(a))
- #define pb push_back
- #define fi first
- #define se second
- #define MP make_pair
- typedef long long ll;
- const int maxn = ;
- const int inf = 0x3f3f3f3f;
- const int mod = ;
- bitset<> ret;
- int a[maxn];
- struct ss {
- int l,r;
- int tag;
- bitset<> b;
- }tr[maxn << ];
- void pushup(int k) {
- tr[k].b=tr[k<<].b | tr[k<<|].b;
- }
- void pushdown(int k) {
- if(!tr[k].tag||tr[k].l==tr[k].r) return ;
- tr[k<<].tag=tr[k].tag;
- tr[k<<|].tag=tr[k].tag;
- tr[k<<].b.reset();tr[k<<].b.set(tr[k].tag);
- tr[k<<|].b.reset();tr[k<<|].b.set(tr[k].tag);
- tr[k].tag=;
- }
- void build(int k,int s,int t) {
- tr[k].l=s;tr[k].r=t;
- tr[k].b.reset();
- tr[k].tag=;
- if(s==t) {
- tr[k].b.set(a[s]);
- return ;
- }
- int mid = (s+t) >> ;
- build(k<<,s,mid);build(k<<|,mid+,t);
- pushup(k);
- }
- void modify(int k,int s,int t,int c) {
- pushdown(k);
- if(s==tr[k].l&&t==tr[k].r) {
- tr[k].b.reset();
- tr[k].tag=c;
- tr[k].b.set(c);
- return ;
- }
- int mid = (tr[k].l+tr[k].r) >> ;
- if(t<=mid) modify(k<<,s,t,c);
- else if(s>mid) modify(k<<|,s,t,c);
- else {
- modify(k<<,s,mid,c);
- modify(k<<|,mid+,t,c);
- }
- pushup(k);
- }
- void ask(int k,int s,int t) {
- pushdown(k);
- if(s==tr[k].l&&t==tr[k].r) {
- ret|=tr[k].b;
- return ;
- }
- int mid = (tr[k].l+tr[k].r) >> ;
- if(t<=mid) ask(k<<,s,t);
- else if(s>mid) ask(k<<|,s,t);
- else {
- ask(k<<,s,mid);
- ask(k<<|,mid+,t);
- }
- }
- int main() {
- int n,m,l,r,x,q;char ch[];
- scanf("%d%d",&n,&m);
- for(int i=;i<=n;i++) scanf("%d",&a[i]);
- build(,,n);
- scanf("%d",&q);
- for(int i=;i<=q;i++) {
- scanf("%s",ch);
- if(ch[]=='Q') {
- scanf("%d%d",&l,&r);
- ret.reset();ask(,l,r);
- printf("%d\n",ret.count());
- }
- else {
- scanf("%d%d%d",&l,&r,&x);
- modify(,l,r,x);
- }
- }
- return ;
- }
代码
CDOJ 1259 昊昊爱运动 II 线段树+bitset的更多相关文章
- cdojQ - 昊昊爱运动 II
地址:http://acm.uestc.edu.cn/#/contest/show/95 题目: Q - 昊昊爱运动 II Time Limit: 3000/1000MS (Java/Others) ...
- UESTC-1259 昊昊爱运动 II
昊昊爱运动 II Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 昊昊喜 ...
- cdoj 1259 线段树+bitset 区间更新/查询
Description 昊昊喜欢运动 他N天内会参加M种运动(每种运动用一个[1,m]的整数表示) 现在有Q个操作,操作描述如下 昊昊把第l天到第r天的运动全部换成了x(x∈[1,m]) 问昊昊第l天 ...
- UVA10869 - Brownie Points II(线段树)
UVA10869 - Brownie Points II(线段树) 题目链接 题目大意:平面上有n个点,Stan和Ollie在玩游戏,游戏规则是:Stan先画一条竖直的线作为y轴,条件是必需要经过这个 ...
- CDOJ 1259 昊昊爱运动 II bitset+线段树
题目链接 昊昊喜欢运动 他N天内会参加M种运动(每种运动用一个[1,m]的整数表示) 现在有Q个操作,操作描述如下 昊昊把第l天到第r天的运动全部换成了x(x∈[1,m]) 问昊昊第l天到第r天参加了 ...
- SPOJ 1557. Can you answer these queries II 线段树
Can you answer these queries II Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://www.spoj.com/pr ...
- bzoj 2482: [Spoj GSS2] Can you answer these queries II 线段树
2482: [Spoj1557] Can you answer these queries II Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 145 ...
- 4990: [Usaco2017 Feb]Why Did the Cow Cross the Road II 线段树维护dp
题目 4990: [Usaco2017 Feb]Why Did the Cow Cross the Road II 链接 http://www.lydsy.com/JudgeOnline/proble ...
- hdu 5831 Rikka with Parenthesis II 线段树
Rikka with Parenthesis II 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5831 Description As we kno ...
随机推荐
- dede 忘记密码在数据库中修改方法
如何找回或修改dedecms后台管理员登录密码呢? 一个客户把密码忘了,找了很长一会没几个靠谱的回答,dede是使用md5加密,但是,它是显示32位md5加密码从第6位开始的20位 方法是直接修改其m ...
- 企业该如何进行高效IT运维管理
企业该如何进行高效IT运维管理 在企业内部也是一样,当大量的生产和经营数据集中在数据中心,一旦人们与数据中心因为IT故障而失去联系,停滞的也许不是个人应用受阻这样简单的后果.我们谁也不想看到自己企业的 ...
- UITableView 表视图编辑
UITableViewController(表视图控制器)继承自UIViewController,自带一个tableView self.view不是UIView而是UITableView dataso ...
- 解决vs2013不能添加控制器的步骤
点击:vs2013 更新,更新完以后,再重启下电脑就可以正常使用了
- [小技巧]初次接触 SSIS Package 的一点总结
1 动态改变数据源 package从创建到调试到测试到生产环境,往往需要运行在不同的服务器上.我们可以定义Environment和Server两个变量,一个用于改变 Server,一个用于接收实际Se ...
- Datawarehouse
- Mysql去除重复
常用的有两种方法,第一种就是select distinct name from table.但是有时候我们要返回多个字段时就用第二种方法select *, count(distinct name) f ...
- c++ 中static关键字
static可以用于修饰普通的变量和函数,也可以用于修饰类的成员 普通应用 1.修饰普通变量 修饰全局变量:将变量的作用域限制在所属文件 修饰局部变量:将变量的生存周期延迟到程序结束 2.修饰普通函数 ...
- MATLAB中匿名函数与符号函数的转换
符号函数举例: syms x y=x+1; y1=diff(y); %求导 匿名函数举例: z=@(x)(x(1)+2*x(2)); t=z([2 3]); %计算z在x=[2 3]处的值 z=@(x ...
- js selector libray
http://sizzlejs.com/ http://selectivizr.com/