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 |
---|---|
5 3 |
3 |
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 ...
随机推荐
- Java之XStream之下划线问题
XStream将Java对象序列为XML, 如果对象属性带有下划线,输出到XML时会转成"__"双下划. 网上很多资料说是Bug, XStream开发的大神没有哪么笨吧? 查了一下 ...
- iOS学习之C语言循环结构
一.while循环 while (循环条件) { 循环体: } // 1.定义循环变量 int time = 1; // 2.循环条件 while ( ...
- UITabelView 高级(自定义Cell)
自定义一个Cell 当我们要显示复杂数据的时候,例如要做一个扣扣聊天界面,或是新闻列表,系统的行已经不能满足我们的要求,这个时候我们可以通过自定义这个行,让他显示更多复杂结构的样式. 自定义cell就 ...
- LNMP下wordpress无法切换主题,只显示当前主题解决方法
最近在lnmp下发现wordpress后台无法切换主题,只能显示当前主题,开始还以为是文件没传完,又重置了一遍,还是一样.百度得知,原来军哥的LNMP安装包默认关闭了scandir函数,为了安全考虑. ...
- SCSF智能客户端学习笔记(一)
什么是智能客户端 要了解智能客户端,首先要认识瘦客户端技术和胖客户端技术各自的优缺点. 对于前者,典型的应用就是使用浏览器,通过输入URL远程访问服务端,并向服务端发送命令,获取服务端的资源,然后在客 ...
- Centos 安装 p7zip,即Linux下的7z
Centos 无法直接通过yum安装7z,我们一般通过repoforge,rpmforge的软件包进行安装,你只需要下载一个对应的包,直接安装就可以 p7zip-9.20.1-1.el4.rf.i38 ...
- [转]Win7 UAC的安全、兼容及权限
[转]Win7 UAC的安全.兼容及权限 http://www.cnblogs.com/mydomain/archive/2010/11/24/1887132.html 网上关于这个问题讨论较多,但也 ...
- 读Windows编程
1.Windows是一个消息驱动系统.它通过把消息投入应用程序消息队列中或者把消息发送给合适的窗口消息处理程序,将发生的各种事件通知给应用程序 2.尽管一个动态链接库模块可能有其它扩展名(如.EXE或 ...
- PB中无法插入ole控件,解决办法
cmd /c for %i in (%windir%\system32\*.ocx) do regsvr32.exe /s %icmd /c for %i in (%windir%\system32\ ...
- 20145103JAVA第一次实验报告
20145103<Java程序设计>第一次实验报告 实验内容及其步骤 一.命令行下java程序开发 建立一个java文件,然后在命令行中,对程序进行javac编译,就生成了.class文件 ...