2120: 数颜色


Time Limit: 6 Sec  Memory Limit: 259 MB
Submit: 6286  Solved: 2489
[Submit][Status][Discuss]

Description


墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会像你发布如下指令: 1、 Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。 2、 R P Col 把第P支画笔替换为颜色Col。为了满足墨墨的要求,你知道你需要干什么了吗?

Input


第1行两个整数N,M,分别代表初始画笔的数量以及墨墨会做的事情的个数。第2行N个整数,分别代表初始画笔排中第i支画笔的颜色。第3行到第2+M行,每行分别代表墨墨会做的一件事情,格式见题干部分。

Output


对于每一个Query的询问,你需要在对应的行中给出一个数字,代表第L支画笔到第R支画笔中共有几种不同颜色的画笔。

Sample Input


  1.  
  2. Q
  3. Q
  4. R
  5. Q
  6. Q

Sample Output


  1.  

HINT


对于100%的数据,N≤10000,M≤10000,修改操作不多于1000次,所有的输入数据中出现的所有整数均大于等于1且不超过10^6。

2016.3.2新加数据两组by Nano_Ape

分析:


总时限6s。咳咳,卡着5.4秒过的,已经不想去翻我是rank多少了,估计垫底了。

我的做法是莫队,对于每两次颜色修改间的所有询问做一次莫队,最多做1000次,但做1000次每次莫队的区间肯定很小,均摊是nsqrt(n)的。。再带个1000的常数(滑稽)
 
话说我是不是应该去看下正解。。。还是啥的,万一正解就是莫队呢(滑稽)。
 

AC代码:

  1. # include <iostream>
  2. # include <cstdio>
  3. # include <cmath>
  4. # include <cstring>
  5. # include <algorithm>
  6. using namespace std;
  7. const int N = 1e4 + 1e3 + ;
  8. const int M = 1e6 + ;
  9. int block[N],sum[N],number[M],tot,n,m,a[N],ans[N],cnt,cntt,num,qaq;
  10. struct per{
  11. int l,r,id;
  12. bool operator <(const per & other)const{
  13. if(block[l] == block[other.l])return r < other.r;
  14. return block[l] < block[other.l];
  15. }
  16. }q[N];
  17. char str[];
  18. void updata(int pos,int d){
  19. if(!sum[number[a[pos]]])num++;
  20. sum[number[a[pos]]] += d;
  21. if(!sum[number[a[pos]]])num--;
  22. }
  23. void Modui(int k){
  24. memset(sum,,sizeof sum);
  25. int L = ,R = ;num = ;
  26. sort(q,q + k);
  27. for(int i = ;i < k;i++){
  28. while(R < q[i].r)R++,updata(R,);
  29. while(R > q[i].r)updata(R,-),R--;
  30. while(L < q[i].l)updata(L,-),L++;
  31. while(L > q[i].l)L--,updata(L,);
  32. ans[q[i].id] = num;
  33. }
  34. }
  35. int main(){
  36. scanf("%d %d",&n,&m);tot = sqrt(n);
  37. for(int i = ;i <= n;i++){
  38. scanf("%d",&a[i]);block[i] = i / tot + ;
  39. if(!number[a[i]])number[a[i]] = ++qaq;
  40. }
  41. int x,y;
  42. for(int i = ;i <= m;i++){
  43. scanf("%s",str);
  44. if(str[] == 'R'){
  45. scanf("%d %d",&x,&y);
  46. Modui(cntt);a[x] = y;cntt = ;if(!number[a[x]])number[a[x]] = ++qaq;
  47. }else {
  48. scanf("%d %d",&q[cntt].l,&q[cntt].r);
  49. q[cntt++].id = ++cnt;
  50. }
  51. }
  52. Modui(cntt);
  53. for(int i = ;i <= cnt;i++){
  54. printf("%d\n",ans[i]);
  55. }
  56. }

[Bzoj2120]数颜色 (非正解 )(莫队)的更多相关文章

  1. BZOJ2120 数颜色 【带修莫队】

    BZOJ2120 数颜色 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到 ...

  2. BZOJ2120 数颜色(带修改莫队)

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  3. BZOJ2120 数颜色 【带修改莫队】

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MB Submit: 6579  Solved: 2625 [Submit][Status][Discus ...

  4. 【BZOJ-2453&2120】维护队列&数颜色 分块 + 带修莫队算法

    2453: 维护队列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 653  Solved: 283[Submit][Status][Discuss] ...

  5. 【BZOJ2120】数颜色(带修莫队)

    点此看题面 大致题意:告诉你\(n\)只蜡笔的颜色,有两种操作:第一种操作将第\(x\)只蜡笔颜色改成\(y\),第二种操作询问区间\([l,r]\)内有多少种颜色的蜡笔. 考虑普通莫队 这题目第一眼 ...

  6. 「洛谷1903」「BZOJ2120」「国家集训队」数颜色【带修莫队,树套树】

    题目链接 [BZOJ传送门] [洛谷传送门] 题目大意 单点修改,区间查询有多少种数字. 解法1--树套树 可以直接暴力树套树,我比较懒,不想写. 稍微口胡一下,可以直接来一个树状数组套主席树,也就是 ...

  7. Bzoj 2120: 数颜色 && 2453: 维护队列 莫队,分块,bitset

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit: 2645  Solved: 1039[Submit][Status][Discuss] ...

  8. BZOJ 2120 数颜色 【带修改莫队】

    任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=2120 2120: 数颜色 Time Limit: 6 Sec  Memory Limit: ...

  9. BZOJ 2120 数颜色(带修改莫队)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2120 [题目大意] 给出一颜色序列,每次可以修改一个位置的颜色或者询问一个区间不同颜色 ...

  10. bzoj 2120: 数颜色【带修改莫队】

    比较裸的带修莫队,对每个修改操作记一下它修改的位置修改前的颜色 然后正常莫队,每次对修改操作时间倒流一下即可 #include<iostream> #include<cstdio&g ...

随机推荐

  1. Delphi7中使用Indy9的IdSmtp发送email时subject过长会出现乱码的解决办法

    procedure TIdMessageClient.SendHeader(AMsg: TIdMessage); var LHeaders: TIdHeaderList; begin LHeaders ...

  2. qt5.8使用qwebenginview注意事项

    环境qt5.8,vs2015(ui.webview必须要先show出来,不然加载不成功) 1.项目属性,c/c++,常规,附加包含目录,新增: $(QTDIR)\include\QtWebChanne ...

  3. LINUX 安装tsung 对OPENFIRE 进行压力测试

    参考资料:  http://www.centoscn.com/image-text/install/2014/0818/3503.html  http://my.oschina.net/jieluck ...

  4. Win2D 入门教程 VB 中文版 - 防止内存泄漏

    避免内存泄漏 本文从微软官方文档翻译 http://microsoft.github.io/Win2D/html/RefCycles.htm 如果文档有问题,可以在 https://github.co ...

  5. (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一

    http://blog.csdn.net/yerenyuan_pku/article/details/52888808 前面我们已经集成了Spring4.2.5+Hibernate4.3.11这两个框 ...

  6. vue :class 可以接收 字符串 数组 和 对象 对象里面的key值 根据true或false 显示不显示

    vue :class 可以接收 字符串 数组 和 对象 对象里面的key值 根据true或false 显示不显示 https://cn.vuejs.org/v2/guide/class-and-sty ...

  7. python基础一 day6 序列操作集合

    列表删除:pop([index])有返回值 remove('元素‘)没有返回值 按元素删,元素是什么,就写什么,是数字就写数字,不要加引号,加引号就变成字符串了,没有就报错. 字典删除:pop( ’键 ...

  8. java web开发中常用的协议的使用和java-web 常见的缓冲技术

    一.DNS协议 作用将域名解析为IP   类似于我们只需要知道中央一台,中央二台,而不需要知道它的频率,方便记忆. java dns 域名解析协议实现 1 域名解析,将域名可转换为ip地址InetAd ...

  9. python之道02

    猜数字,设定一个理想数字比如:66,让用户输入数字,如果比66大,则显示猜测的结果大了,然后继续让用户输入; 如果比66小,则显示猜测的结果小了,然后继续让用户输入;只有等于66,显示猜测结果正确,然 ...

  10. react-native 在新版Xcode(10+)中运行出现的问题: node_modules/react-native/third-party/glog-0.3.4 , C compiler cannot create executables

    报错发生在 react-native : 0.55.4 (或存在于更低的版本) 报错: ----/node_modules/react-native/third-party/glog-0.3.4': ...