http://www.cnblogs.com/icode-girl/p/5783983.html

要注意卡片没有都被使用的情况。

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cmath>
  4. using namespace std;
  5. #define N 100010
  6. int K,n,a[N],nex[N],now[N],m,anss[N];
  7. bool vis[N];
  8. struct ASK{int l,r,p;}Q[N];
  9. int num[N];
  10. bool operator < (const ASK &a,const ASK &b)
  11. {return num[a.l]!=num[b.l] ? num[a.l]<num[b.l] : a.r<b.r;}
  12. void makeblock()
  13. {
  14. int sz=sqrt(n),sum=1; if(!sz) sz=1;
  15. for(;sum*sz<n;++sum)
  16. {
  17. int r=sum*sz;
  18. for(int i=sz*(sum-1)+1;i<=r;++i)
  19. num[i]=sum;
  20. }
  21. for(int i=sz*(sum-1)+1;i<=n;++i)
  22. num[i]=sum;
  23. }
  24. int T[N],ans;
  25. void Insert(int x)
  26. {
  27. if(!T[x]) ++ans;
  28. ++T[x];
  29. }
  30. void Delete(int x)
  31. {
  32. --T[x];
  33. if(!T[x]) --ans;
  34. }
  35. int main()
  36. {
  37. //freopen("c.in","r",stdin);
  38. scanf("%d%d",&K,&n);
  39. for(int i=1;i<=n;++i)
  40. scanf("%d",&a[i]);
  41. int k=0;
  42. for(int i=1;i<=n;++i)
  43. if(!vis[a[i]])
  44. {
  45. ++k;
  46. vis[a[i]]=1;
  47. printf("%d%c",a[i],k==K ? '\n' : ' ');
  48. }
  49. for(int i=1;i<=K;++i)
  50. if(!vis[i])
  51. {
  52. ++k;
  53. printf("%d%c",i,k==K ? '\n' : ' ');
  54. }
  55. for(int i=n;i>=1;--i)
  56. {
  57. nex[i]=now[a[i]];
  58. now[a[i]]=i;
  59. }
  60. for(int i=1;i<=n;++i)
  61. if(nex[i]>i+1)
  62. {
  63. Q[++m].l=i+1;
  64. Q[m].r=nex[i]-1;
  65. Q[m].p=i;
  66. }
  67. else if(nex[i]==i+1)
  68. anss[i]=0;
  69. else
  70. anss[i]=K-1;
  71. makeblock();
  72. sort(Q+1,Q+m+1);
  73. for(int i=Q[1].l;i<=Q[1].r;++i) Insert(a[i]);
  74. anss[Q[1].p]=ans;
  75. for(int i=2;i<=m;++i)
  76. {
  77. if(Q[i].l<Q[i-1].l){for(int j=Q[i-1].l-1;j>=Q[i].l;--j)Insert(a[j]);}
  78. else{for(int j=Q[i-1].l;j<Q[i].l;++j)Delete(a[j]);}
  79. if(Q[i].r<Q[i-1].r){for(int j=Q[i-1].r;j>Q[i].r;--j)Delete(a[j]);}
  80. else{for(int j=Q[i-1].r+1;j<=Q[i].r;++j)Insert(a[j]);}
  81. anss[Q[i].p]=ans;
  82. }
  83. for(int i=1;i<=n;++i)
  84. printf("%d\n",anss[i]);
  85. return 0;
  86. }

【莫队算法】URAL - 2080 - Wallet的更多相关文章

  1. NBUT 1457 莫队算法 离散化

    Sona Time Limit:5000MS     Memory Limit:65535KB     64bit IO Format: Submit Status Practice NBUT 145 ...

  2. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 7687  Solved: 3516[Subm ...

  3. NPY and girls-HDU5145莫队算法

    Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description ...

  4. Codeforces617 E . XOR and Favorite Number(莫队算法)

    XOR and Favorite Number time limit per test: 4 seconds memory limit per test: 256 megabytes input: s ...

  5. Bzoj 2038---[2009国家集训队]小Z的袜子(hose) 莫队算法

    题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色 ...

  6. 【BZOJ-3052】糖果公园 树上带修莫队算法

    3052: [wc2013]糖果公园 Time Limit: 200 Sec  Memory Limit: 512 MBSubmit: 883  Solved: 419[Submit][Status] ...

  7. 莫队算法 2038: [2009国家集训队]小Z的袜子(hose)

    链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2038 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 ...

  8. Codeforces 617E XOR and Favorite Number(莫队算法)

    题目大概说给一个序列,多次询问区间异或和为k的连续子序列有多少个. 莫队算法,利用异或的性质,通过前缀和求区间和,先处理出序列各个前缀和,然后每次区间转移时维护i以及i-1前缀和为某数的个数并增加或减 ...

  9. 信心题--FUOJ2226(莫队算法)

    http://acm.fzu.edu.cn/problem.php?pid=2226 信心题,还说是信心题,题目给的真好.但是一点都不像信心题. 又是一个新的算法,莫队算法 莫队算法是一个用数组就可以 ...

  10. [BZOJ2038]小Z的袜子(莫队算法)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2038 分析:莫队算法 莫队算法是一种思想…… 处理问题:不带修改的区间询问 使用要求:[l-1 ...

随机推荐

  1. typescript的入门

    命令行使用tsc 1.安装typescript npm install -g typescript 2.新建一个index.ts 输入export hello class{} 3.编译 tsc ind ...

  2. 获取系统内RAR安装路径

    RegistryKey the_Reg = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVers ...

  3. Java中Class<T>与Class<?>的区别

    E - Element (在集合中使用,因为集合中存放的是元素) T - Type(Java 类) K - Key(键) V - Value(值) N - Number(数值类型) ? - 表示不确定 ...

  4. jquery实现通用结构折叠面板效果

    效果截图: 说明:可以任意添加多个类似结构样式,点击标题栏图片对应隐藏.显示. jquery代码: 思路一:基本方法 <script src="http://apps.bdimg.co ...

  5. 有关getClassLoader().getResourceAsStream(fileName)、class.getResourceAsStream(fileName)和().getContextClassLoader().getResourceAsStream(fileName)的区别

    一:前言 在自己获取属性时,碰见了XX.class.getResourceAsStream(fileName),自己对这个其实不是很理解,上网查了下资料,又看到了上述的几个,所以就研究了下. 二:内容 ...

  6. [Leetcode Week3]Evaluate Division

    Evaluate Division题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/evaluate-division/description/ Desc ...

  7. HDU1166(线段树单点更新区间查询)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  8. POJ3180(有向图强连通分量结点数>=2的个数)

    The Cow Prom Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1451   Accepted: 922 Descr ...

  9. Selenium IDE安装和检查获取的控件路径技巧

    来源:http://www.jianshu.com/p/0ea2dc83549f 从学习Selenium 开始,都是自己写脚本,后来得知有个插件Selenium IDE可以录制脚本,也懒得用了,觉得自 ...

  10. SQlServer的日期相减(间隔)datediff函数

    select datediff(year, 开始日期,结束日期); --两日期间隔年  select datediff(quarter, 开始日期,结束日期); --两日期间隔季  select da ...