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处断开 然后考虑能一圈一圈走的情况,连续一段多走 ...
随机推荐
- redis 连接池
redis是一个key-value存储系统,和memcached类似,支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set-有 ...
- 微软2016校园招聘4月在线笔试 hihocoder 1289 403 Forbidden
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 Little Hi runs a web server. Sometimes he has to deny acces ...
- 【Python】setup-转载
python+PyQT+Eric安装配置 python+PyQT+Eric安装配置 作者: loker 博客: http://www.cnblogs.com/lhj588/ 时间: 2011年10月3 ...
- iOS-去除NavigationBar边线
解决办法: self.navigationController.navigationBar.barStyle = UIBaselineAdjustmentNone;
- 离散化——化不可能为可能(STL)
所谓离散,就是化连续为不连续,使得我们某种枚举的方法得以实现. 当然,离散还能够帮助我们将某些数据范围很大达到2^16,但是这些数据并不多(例如才1000+),我们可以把数据进行离散,保持他们之间的相 ...
- CKEDITOR 3.4.2中 按钮事件中 动态改变图标和title 获取按钮
this.uiItems[0].className="cke_button_hui_position_type";this.uiItems[0].title="zhang ...
- bootstrap 媒体查询
//各类设备的分辨率 /*超小设备(手机,小于768px)*/ /* Bootstrap 中默认情况下没有媒体查询 */ /*超小型设备(小于768px)*/ @media (min-width:@s ...
- PAT 1013 Battle Over Cities(并查集)
1013. Battle Over Cities (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue It ...
- YOLO v1论文笔记
You Only Look Once:Unified, Real-Time Object Detection 论文链接:https://arxiv.org/abs/1506.02640 Homep ...
- Spring 框架的事务管理
1. Spring 框架的事务管理相关的类和API PlateformTransactionManager 接口: 平台事务管理器(真正管理事务的类); TransactionDefinition 接 ...