地址:http://acm.uestc.edu.cn/#/contest/show/95

题目:

Q - 昊昊爱运动 II

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
Submit Status

昊昊喜欢运动

他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
1 2 3 2 3
4
Q 1 4
Q 2 4
M 5 5 2
Q 1 5
3
2
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的更多相关文章

  1. CDOJ 1259 昊昊爱运动 II 线段树+bitset

    昊昊爱运动 II 昊昊喜欢运动 他N天内会参加M种运动(每种运动用一个[1,m]的整数表示) 现在有Q个操作,操作描述如下 昊昊把第l天到第r天的运动全部换成了x(x∈[1,m]) 问昊昊第l天到第r ...

  2. UESTC-1259 昊昊爱运动 II

    昊昊爱运动 II Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)     昊昊喜 ...

  3. CDOJ 1259 昊昊爱运动 II bitset+线段树

    题目链接 昊昊喜欢运动 他N天内会参加M种运动(每种运动用一个[1,m]的整数表示) 现在有Q个操作,操作描述如下 昊昊把第l天到第r天的运动全部换成了x(x∈[1,m]) 问昊昊第l天到第r天参加了 ...

  4. UESTC 1256 昊昊爱运动 Map

    昊昊爱运动 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) 昊昊喜欢运动 他N天 ...

  5. cdoj 1256 昊昊爱运动 预处理/前缀和

    昊昊爱运动 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1256 Descr ...

  6. cdoj 1256 昊昊爱运动 预处理

    昊昊爱运动 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) 昊昊喜欢运动 他NN ...

  7. bzoj 3704 昊昊的机油之GRST 贪心dp,思维

    昊昊的机油之GRST Time Limit: 10 Sec  Memory Limit: 1024 MBSubmit: 80  Solved: 33[Submit][Status][Discuss] ...

  8. bzoj 3704 昊昊的机油之GRST - 贪心

    题目传送门 传送门 题目大意 给定一个数组$a$和数组$b$,每次操作可以选择$a$的一个子区间将其中的数在模4意义下加1,问把$a$变成$b$的最少操作次数. 首先求$b - a$,再差分,令这个数 ...

  9. bzoj 3704: 昊昊的机油之GRST【贪心+脑洞】

    脑洞题大概 首先处理出每个位置需要操作的次数c,假设第一次达到目标就不能再走,这样的操作次数是c差分后值的正数和,就想成分治每一段然后同减最小值然后从0处断开 然后考虑能一圈一圈走的情况,连续一段多走 ...

随机推荐

  1. php ajax dom---动态增加

    js代码 <script type="text/javascript"> $(document).ready(function(){ $("#talk_sen ...

  2. Struts2漏洞

    近日,Struts2曝出2个高危安全漏洞,一个是使用缩写的导航参数前缀时的远程代码执行漏洞,另一个是使用缩写的重定向参数前缀时的开放式重定向漏洞.这些漏洞可使黑客取得网站服务器的“最高权限”,从而使企 ...

  3. hdu 1051:Wooden Sticks(水题,贪心)

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  4. socket文件权限变更引起crs无法启动故障

    Crs无法正常启动,也无法关闭.[root@rac101 ~]# crsctl stop crsStopping resources. This could take several minutes. ...

  5. matlab中图片数据类型转换uint8与double

    matlab中处理图像像素点数据: img1=double(imread('lenna.bmp')); matlab中imshow图片,要先转换成uint8: subplot(1,2,1),imsho ...

  6. server r2 系统更新文件清理

    https://support.microsoft.com/zh-cn/kb/2852386

  7. hdu 5090 Game with Pearls(最大匹配)

    Game with Pearls Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  8. Eclipse UML插件

    Green UML http://green.sourceforge.net/ AmaterasUML http://amateras.sourceforge.jp/cgi-bin/fswiki_en ...

  9. selenium 方法导图

  10. ios开源东西

    今天,我们将介绍20个在GitHub上非常受开发者欢迎的iOS开源项目,你准备好了吗? 1. AFNetworking 在众多iOS开源项目中,AFNetworking可以称得上是最受开发者欢迎的库项 ...