cdojQ - 昊昊爱运动 II
地址:http://acm.uestc.edu.cn/#/contest/show/95
题目:
Q - 昊昊爱运动 II
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
昊昊喜欢运动
他NN 天内会参加MM 种运动(每种运动用一个[1,m][1,m] 的整数表示)
现在有QQ 个操作,操作描述如下
- 昊昊把第ll 天到第rr 天的运动全部换成了xx (x∈[1,m]x∈[1,m] )
- 问昊昊第ll 天到第rr 天参加了多少种不同的运动
Input
输入两个数NN , MM (1≤N≤1051≤N≤105 , 1≤M≤1001≤M≤100 );
输入NN 个数aiai (ai∈[1,m]ai∈[1,m] )表示在第i天昊昊做了第aiai 类型的运动;
输入一个数QQ (1≤Q≤1051≤Q≤105 );
输入QQ 行 每行描述以下两种操作
- 形如
M l r x
,表示昊昊把第ll 天到第rr 天的运动全部换成了xx (x∈[1,m]x∈[1,m] ) - 形如
Q l r
,表示昊昊想知道他第ll 天到第rr 天参加了多少种不同的运动
Output
l
Sample input and output
Sample Input | Sample Output |
---|---|
|
|
思路:
区间覆盖,区间查询
依旧线段树搞起,不过有pushup和pushdown操作,这要注意下
具体的就不说了,和前面的题目没啥区别
对了要用bitset记录,,差点忘了、
- #include <iostream>
- #include <algorithm>
- #include <cstdio>
- #include <cmath>
- #include <cstring>
- #include <queue>
- #include <stack>
- #include <map>
- #include <vector>
- #include <cstdlib>
- #include <string>
- #include <bitset>
- #define PI acos((double)-1)
- #define E exp(double(1))
- #define K 100000
- using namespace std;
- int n,m;
- int a[K+];
- struct node
- {
- bitset<>s;
- int change,l,r;
- };
- struct node tree[*K+];
- void pushdown(int id)
- {
- if(!tree[id].change)
- return ;
- tree[id*+].s=tree[id*].s=tree[id].s;
- tree[id*+].change=tree[id*].change=;
- tree[id].change=;
- }
- void build(int id,int l,int r)
- {
- tree[id].l=l;tree[id].r=r;tree[id].change=;
- if(l==r)
- tree[id].s[a[l]]=;
- else
- {
- int mid=(tree[id].l+tree[id].r)>>;
- if(r <= mid) build(id*,l,r);
- else if(l > mid) build(id*+,l,r);
- else
- {
- build(id<<,l,mid);
- build(id*+,mid+,r);
- }
- tree[id].s=tree[id*].s|tree[id*+].s;
- }
- }
- void update(int id,int l,int r,int v)
- {
- if(tree[id].l==l && tree[id].r==r)
- {
- tree[id].change=;
- tree[id].s.reset();
- tree[id].s[v]=;
- }
- else
- {
- pushdown(id);
- int mid=(tree[id].l+tree[id].r)>>;
- if(r<=mid) update(id<<,l,r,v);
- else if(l>mid) update(id*+,l,r,v);
- else
- {
- update(id<<,l,mid,v);
- update(id*+,mid+,r,v);
- }
- tree[id].s=tree[id*].s|tree[id*+].s;
- }
- }
- bitset<> query(int id,int l,int r)
- {
- if(tree[id].l == l && tree[id].r==r )
- return tree[id].s;
- else
- {
- pushdown(id);
- int mid=(tree[id].l+tree[id].r)>>;
- bitset<>ret;
- if(r<=mid) ret=ret|query(id*,l,r);
- else if(l>mid) ret=ret|query(id*+,l,r);
- else
- {
- ret=ret|query(id*,l,mid);
- ret=ret|query(id*+,mid+,r);
- }
- return ret;
- }
- }
- int main(void)
- {
- cin>>n>>m;
- for(int i=;i<=n;i++)
- scanf("%d",&a[i]);
- build(,,n);
- int q;
- cin>>q;
- while(q--)
- {
- char c;
- c=getchar();
- while(c==' ' || c=='\n')
- c=getchar();
- if(c=='M')
- {
- int l,r,v;
- scanf("%d%d%d",&l,&r,&v);
- update(,l,r,v);
- }
- else
- {
- int l,r,num=;
- scanf("%d%d",&l,&r);
- bitset<> temp=query(,l,r);
- for(int i=;i<=m;i++)
- if(temp.test(i))
- num++;
- printf("%d\n",num);
- }
- }
- return ;
- }
cdojQ - 昊昊爱运动 II的更多相关文章
- CDOJ 1259 昊昊爱运动 II 线段树+bitset
昊昊爱运动 II 昊昊喜欢运动 他N天内会参加M种运动(每种运动用一个[1,m]的整数表示) 现在有Q个操作,操作描述如下 昊昊把第l天到第r天的运动全部换成了x(x∈[1,m]) 问昊昊第l天到第r ...
- UESTC-1259 昊昊爱运动 II
昊昊爱运动 II Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 昊昊喜 ...
- CDOJ 1259 昊昊爱运动 II bitset+线段树
题目链接 昊昊喜欢运动 他N天内会参加M种运动(每种运动用一个[1,m]的整数表示) 现在有Q个操作,操作描述如下 昊昊把第l天到第r天的运动全部换成了x(x∈[1,m]) 问昊昊第l天到第r天参加了 ...
- UESTC 1256 昊昊爱运动 Map
昊昊爱运动 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 昊昊喜欢运动 他N天 ...
- cdoj 1256 昊昊爱运动 预处理/前缀和
昊昊爱运动 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1256 Descr ...
- cdoj 1256 昊昊爱运动 预处理
昊昊爱运动 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 昊昊喜欢运动 他NN ...
- bzoj 3704 昊昊的机油之GRST 贪心dp,思维
昊昊的机油之GRST Time Limit: 10 Sec Memory Limit: 1024 MBSubmit: 80 Solved: 33[Submit][Status][Discuss] ...
- bzoj 3704 昊昊的机油之GRST - 贪心
题目传送门 传送门 题目大意 给定一个数组$a$和数组$b$,每次操作可以选择$a$的一个子区间将其中的数在模4意义下加1,问把$a$变成$b$的最少操作次数. 首先求$b - a$,再差分,令这个数 ...
- bzoj 3704: 昊昊的机油之GRST【贪心+脑洞】
脑洞题大概 首先处理出每个位置需要操作的次数c,假设第一次达到目标就不能再走,这样的操作次数是c差分后值的正数和,就想成分治每一段然后同减最小值然后从0处断开 然后考虑能一圈一圈走的情况,连续一段多走 ...
随机推荐
- ActiveMQ 无法启动 提示端口被占用 解决方案
http://bob-zhangyong.blog.163.com/blog/static/17610982012729113326153/ ————————————————————————————— ...
- css3兼容代码
1. 渐变:.gradient{ width:300px; height:150px; filter:alpha(opacity=100 finishopacity=50 style=1 startx ...
- Jmeter接口测试系列之参数化方法
至于参数化的用途,我这里就不多说了,本文主要介绍最全.最强大的参数化方法,对参数化有一个彻底的认识,这里提供了多种参数化方法 1.jmeter参数化之用户变量 在测试计划里面添加一个用户自定义的变 ...
- 要创建一个EJB,必须要至少编写哪些Java类和接口?
要创建一个EJB,必须要至少编写哪些Java类和接口? A. 定义远程(或业务)接口 B. 定义本地接口 C. 定义Bean接口 D. 编写Bean的实现 解答:ABC
- debug命令
debug -r 查看寄存器-a 输入指令-t 执形命令 通用寄存器:AX=AH+ALBX=BH+BLCX=CH+CLDX=DH+DL 2Byte 16bitFFFF0-(2的16次方减1) debu ...
- jquery代码规范让代码越来越好看
最近学了jQuery,感觉这个jQuery是真的挺不错的,果然像他说的那样,少些多做!刚一入手感觉真是不错.但是写多了,就会发现这个代码一行居然能写那么长.而且可读性还不好. 有幸自己买了一本锋利的 ...
- Linux下android开发环境配置
1.安装jdk 1.到sun官网下载jdk(附jdk6下载地址),根据自己的ubuntu版本选择合适的jdk版本.如你用的是ubuntu 32位系统则选择下载jdk-6u41-linux-i586.b ...
- Request的属性和防止图片被盗链
Request.AppRelativeCurrentExecutionFilePath,获取当前执行请求相对于应用根目录的虚拟路径,以~开头,比如"~/default.ashx" ...
- Android 界面滑动卡顿分析与解决方案(入门)
Android 界面滑动卡顿分析与解决方案(入门) 导致Android界面滑动卡顿主要有两个原因: 1.UI线程(main)有耗时操作 2.视图渲染时间过长,导致卡顿 目前只讲第1点,第二点相对比较复 ...
- JavaScript-烂笔头
JavaScript 对大小写敏感 注释单行用:// 注释多汗用:/* */ 声明变量:var 变量名 (未使用值来声明的变量,值为undefined) JavaScript 变量均为对象 可以使用关 ...