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 |
|---|---|
5 3 |
3 |
思路:
区间覆盖,区间查询
依旧线段树搞起,不过有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处断开 然后考虑能一圈一圈走的情况,连续一段多走 ...
随机推荐
- Jetty修改默认端口
1.webserver: Jetty2.version: 7.6.5, 8.1.53.operation: 修改默认端口3.1 修改Jetty目录下的/etc/jetty.xml 文件中的[por ...
- VS2013远程调试IIS中的网站
问题描述一般网站发布到远程iis中了.我们就无法调试了... 今天查到个可以远程调试iis或winform的方法: 记录下 第一步:copy 本地 C:\Program Files (x86)\Mic ...
- 微信 Mustache
最近微信小程序非常火,对于前端开发的程序员是个利好的消息,这里主要记录下微信小程序 Mustache语法. 小程序开发的wxml里,用到了Mustache语法.所以,非常有必要把Mustache研究 ...
- servlet各版本区别以及dynamic web module 版本之间的区别
java的web系统有多种类型,比如静态的和动态的,然后动态的java web project要设置dynamic web module,也就是动态网页模型,他必须要喝对应的服务器搭配好了才能跑,今天 ...
- linux配置sftp用户的chroot步骤(用户的sftp根文件夹)
1.编辑ssh中的sftp的配置,命令可能是:vi /etc/ssh/sshd_config 在这个文件里最后增加 #限制sftp组的用户使用sftp时在自己的home文件夹下 Match Group ...
- Linux下android开发环境配置
1.安装jdk 1.到sun官网下载jdk(附jdk6下载地址),根据自己的ubuntu版本选择合适的jdk版本.如你用的是ubuntu 32位系统则选择下载jdk-6u41-linux-i586.b ...
- java如何遍历当月所有的日期?
转自:https://zhidao.baidu.com/question/360215274.html import java.util.ArrayList;import java.util.Cale ...
- TCL V7300A-3D升级教程
鄙人的电视型号: 机器软件版本:V8-0MT-3201-LF1V028_000 3201是机芯 v028是版本号 设备型号:cn_mt32-v7300a-3d TCL电视升级有三个:本地.网络.自动 ...
- 你不知道的Javascript(上卷)读书笔记之三 ---- 函数作用域与块作用域
1. 函数中的作用域 函数作用域的含义是指属于这个函数的全部变量都可以在整个函数范围内使用以及复用 2. 隐藏内部实现 函数经常使用于隐藏”内部实现”,可以把变量和函数包裹在一个函数的作用域中,然后用 ...
- Active Object pattern
http://www.ibm.com/developerworks/cn/java/j-lo-activeobject/ 之所以叫, 主动对象, 区别于被动对象, 只能被动被别人调用的对象, 而主动对 ...