昊昊爱运动 II

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

昊昊喜欢运动

他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
1 2 3 2 3
4
Q 1 4
Q 2 4
M 5 5 2
Q 1 5
3
2
3

Source

咦。。。     
 
分析
这道题看上去像是Dynamic len(set(a[LR])),但是单点更新变成了区间更新,看上去不太好搞。
注意到m比较小,可以用更简单的方式来维护,线段树每个结点用bitset保存一下这m个数字的出现情况和更新标记就好了。
 
/*********************************************************
* --------------Alfheim-------------- *
* author AbyssalFish *
**********************************************************/
#include<bits/stdc++.h>
using namespace std; typedef long long ll; const int MAX_N = 1e5+, MAX_M = +;
int N, M; int a[MAX_N]; #define para int o = 1, int l = 1, int r = N
#define lo (o<<1)
#define ro (o<<1|1)
#define Tvar int md = (l+r)>>1;
#define lsn lo,l,md
#define rsn ro,md+1,r
#define insd ql <= l && r <= qr
const int ST_SIZE = <<; int S[ST_SIZE];
bitset<MAX_M> E[ST_SIZE]; inline void sink(int o,int s)
{
E[o].reset(); E[o].set(S[o] = s);
} void build(para)
{
if(l == r){
E[o].set(a[l]);
}
else {
Tvar
build(lsn);
build(rsn);
E[o] = E[lo] | E[ro];
}
} inline void push_down(int o)
{
if(S[o]){
sink(lo,S[o]);
sink(ro,S[o]);
S[o] = ;
}
} bitset<MAX_M> res;
int ql,qr;
void query(para)
{
if(insd){
res |= E[o];
}
else {
push_down(o);
Tvar
if(ql <= md) query(lsn);
if(qr > md) query(rsn);
}
} int qval;
void modify(para)
{
if(insd){
sink(o,qval);
}
else {
push_down(o);
Tvar
if(ql <= md) modify(lsn);
if(qr > md) modify(rsn);
E[o] = E[lo] | E[ro];
}
} //#define LOCAL
int main()
{
#ifdef LOCAL
freopen("data.txt","r",stdin);
#endif
scanf("%d%d",&N,&M);
for(int i = ; i <= N; i++) scanf("%d",a+i);
build();
int Q; scanf("%d",&Q);
char op[];
while(Q--){
scanf("%s%d%d",op,&ql,&qr);
if(*op == 'Q'){
res.reset();
query();
printf("%d\n", res.count());
}
else {
scanf("%d",&qval);
modify();
}
}
return ;
}

UESTC-1259 昊昊爱运动 II的更多相关文章

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

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

  2. cdojQ - 昊昊爱运动 II

    地址:http://acm.uestc.edu.cn/#/contest/show/95 题目: Q - 昊昊爱运动 II Time Limit: 3000/1000MS (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. UESTC 915 方老师的分身II --最短路变形

    即求从起点到终点至少走K条路的最短路径. 用两个变量来维护一个点的dis,u和e,u为当前点的编号,e为已经走过多少条边,w[u][e]表示到当前点,走过e条边的最短路径长度,因为是至少K条边,所以大 ...

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

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

随机推荐

  1. java Collection中的排序问题

    java Collection中的排序问题 这里讨论list.set.map的排序,包括按照map的value进行排序. 1)list排序 list排序可以直接采用Collections的sort方法 ...

  2. python - 约瑟夫问题

    在罗马人占领乔塔帕特后,39 个犹太人与约瑟夫及他的朋友躲到一个洞中.39个犹太人决定宁愿死也不要被敌人俘虏,商定一种特殊的方式自杀,41个人排成一个圆圈,由第1个人开始报数,每报到第3人该人就必须自 ...

  3. Data Guard 管理原理

    ##三大优势>Data Guard属于Oracle 自己的产品,其技术成熟完善.稳定可靠>可以随时验证业务数据的有效性>免费产品 Data Guard由主库(PRIMARY DATA ...

  4. jquery、js判断复选框是否选中

    js: if (document.getElementById("checkboxID").checked) { alert("checkobx is checked&q ...

  5. TOJ 3488 Game Dice

    描述 In the game of Dungeons & Dragons, players often roll multi-sided dice to generate random num ...

  6. mongoDB cpu飙高问题

    问题描述: 最近几天生产环境上的mongodb一直在报警,cpu飙高,其他如内存.iops.连接数.磁盘操作等都正常.通过定位业务,发现是由于mongodb的表其中一个查询未建立索引导致,110多W的 ...

  7. HDU 5289——Assignment——————【RMQ+优化求解】

    Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  8. BNU29139——PvZ once again——————【矩阵快速幂】

    PvZ once again Time Limit: 2000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java cla ...

  9. .Net Mvc框架知识点

    一.实现Controller的依赖注入: 1.自定义继承DefaultControllerFactory 类的控制器工厂类并重写GetControllerInstance方法:(如:InjectCon ...

  10. intent 活动之间穿梭

    1.从当前activity,跳转到当前应用程序的activity Intent intent = new Intent(MainActivity.this, Intent2Activity.class ...