区间动态统计的好题。

  1. /* */
  2. #include <iostream>
  3. #include <string>
  4. #include <map>
  5. #include <queue>
  6. #include <set>
  7. #include <stack>
  8. #include <vector>
  9. #include <deque>
  10. #include <algorithm>
  11. #include <cstdio>
  12. #include <cmath>
  13. #include <ctime>
  14. #include <cstring>
  15. #include <climits>
  16. #include <cctype>
  17. #include <cassert>
  18. #include <functional>
  19. using namespace std;
  20. //#pragma comment(linker,"/STACK:102400000,1024000")
  21.  
  22. #define rep(i, a, n) for (int i=a;i<n;++i)
  23. #define per(i, a, n) for (int i=n-1;i>=a;--i)
  24. #define pb push_back
  25. #define mp make_pair
  26. #define all(x) (x).begin(),(x).end()
  27. #define SZ(x) ((int)(x).size())
  28. #define lson l, mid, rt<<1
  29. #define rson mid+1, r, rt<<1|1
  30.  
  31. typedef struct inter_t {
  32. int l, r, id, ans;
  33. inter_t() {}
  34. inter_t(int _l, int _r, int _id, int _ans=):
  35. l(_l), r(_r), id(_id), ans(_ans) {}
  36. friend bool operator< (const inter_t& a, const inter_t& b) {
  37. if (a.r == b.r)
  38. return a.l > b.l;
  39. else
  40. return a.r < b.r;
  41. }
  42. } inter_t;
  43.  
  44. const int maxn = 1e5+;
  45. vector<int> vc[maxn];
  46. int sz[maxn];
  47. vector<inter_t> Q;
  48. map<int,int> tb;
  49. int d[maxn];
  50. int a[maxn], l = ;
  51. int v[maxn];
  52.  
  53. bool comp(const inter_t& a, const inter_t& b) {
  54. return a.id < b.id;
  55. }
  56.  
  57. int main() {
  58. int i, j, k;
  59. int n, m;
  60.  
  61. #ifndef ONLINE_JUDGE
  62. freopen("data.in", "r", stdin);
  63. freopen("data.out", "w", stdout);
  64. #endif
  65.  
  66. scanf("%d %d", &n, &m);
  67. for (i=; i<=n; ++i)
  68. scanf("%d", &a[i]);
  69.  
  70. int li, ri;
  71. for (i=; i<m; ++i) {
  72. scanf("%d %d", &li, &ri);
  73. Q.push_back(inter_t(li, ri, i));
  74. }
  75. sort(Q.begin(), Q.end());
  76. Q.push_back(inter_t(,n+,m));
  77. memset(d, , sizeof(d));
  78. memset(sz, , sizeof(sz));
  79.  
  80. int r = , mr, x, id, p, cnt;
  81. i = ;
  82. while (i < m) {
  83. mr = Q[i].r;
  84. while (r <= mr) {
  85. x = a[r];
  86. id = tb[x];
  87. if (id == ) {
  88. tb[x] = id = l;
  89. l++;
  90. v[l] = x;
  91. }
  92. vc[id].push_back(r);
  93. ++sz[id];
  94. if (sz[id] >= x) {
  95. p = vc[id][sz[id]-x];
  96. ++d[p];
  97. }
  98. if (sz[id] >= x+) {
  99. p = vc[id][sz[id]-x-];
  100. d[p] -= ;
  101. }
  102. if (sz[id] > x+) {
  103. p = vc[id][sz[id]-x-];
  104. ++d[p];
  105. }
  106. ++r;
  107. }
  108. cnt = ;
  109. k = mr+;
  110. while (Q[i].r == mr) {
  111. for (j=Q[i].l; j<k; ++j)
  112. cnt += d[j];
  113. Q[i].ans = cnt;
  114. k = Q[i].l;
  115. ++i;
  116. }
  117. }
  118.  
  119. sort(Q.begin(), Q.end(), comp);
  120. for (i=; i<m; ++i)
  121. printf("%d\n", Q[i].ans);
  122.  
  123. #ifndef ONLINE_JUDGE
  124. printf("time = %d.\n", (int)clock());
  125. #endif
  126.  
  127. return ;
  128. }

【CF】220B Little Elephant and Array的更多相关文章

  1. 【26】Remove Duplicates from Sorted Array

    [26]Remove Duplicates from Sorted Array Given a sorted array, remove the duplicates in place such th ...

  2. 【LeetCode】697. Degree of an Array 解题报告

    [LeetCode]697. Degree of an Array 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/degree- ...

  3. 【LeetCode】Search in Rotated Sorted Array——旋转有序数列找目标值

    [题目] Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 ...

  4. 【LeetCode】Two Sum II - Input array is sorted

    [Description] Given an array of integers that is already sorted in ascending order, find two numbers ...

  5. php基础知识【函数】(1)数组array

    一.排序 1.sort -- 从最低到最高排序,删除原有的键名,赋予新的键名[字母比数字高] 2.rsort -- 逆向排序(最高到最低),删除原有的键名,赋予新的键名[字母比数字高] 3.asort ...

  6. 【leetcode】Remove Duplicates from Sorted Array II

    Remove Duplicates from Sorted Array II Follow up for "Remove Duplicates":What if duplicate ...

  7. 【leetcode】Search in Rotated Sorted Array II

    Search in Rotated Sorted Array II Follow up for "Search in Rotated Sorted Array":What if d ...

  8. 【leetcode】Search in Rotated Sorted Array

    Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you before ...

  9. 【leetcode】Search in Rotated Sorted Array (hard)

    Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...

随机推荐

  1. 科讯CMS V9标签清单

    全新整理V9标签清单 ====================网站通用标签============== {$GetSiteTitle} 显示网站标题 {$GetSiteName} 显示网站名称 {$G ...

  2. 基于Memcache的分布式缓存系统详解

    文章不是简单的的Ctrl C与V,而是一个字一个标点符号慢慢写出来的.我认为这才是是对读者的负责,本教程由技术爱好者成笑笑(博客:http://www.chengxiaoxiao.com/)写作完成. ...

  3. UESTCOJ-BiliBili, ACFun… And More!(水题)

    BiliBili, ACFun… And More! Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Ja ...

  4. Asp.net: WebForm基础上构建Mvc的方法

    添加引用: System.Web.Routing System.Web.Abstractions System.Web.Mvc 添加文件夹: Controllers, Views,  Views / ...

  5. P2P之UDP穿透NAT原理

    首先先介绍一些基本概念:             NAT(Network   Address   Translators),网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就 ...

  6. java.lang.InstantiationError: sun.net.ftp.FtpClient

    发送邮件功能.本地可以,测试环境上报错.是JDK  版本导致的,,本地1.6   测试环境JDK  1.7 解决办法: 1.测试环境重新配置jdk  1.6 环境.. 2.安装  JDK  1.7  ...

  7. 原生与jqueryDOM

    总结与复习原生与jquery的DOM操作. 获取元素节点: $(".class") $("#id") $(".class div") $(& ...

  8. LINUX 压缩目录成一个压缩文件

    #!/bin/bash file =$(date +%y%m%d%H%M)logfile=/home/目录名/backup/file.log echo "------"$(date ...

  9. web版扫雷小游戏(三)

    ~~~接上篇,上篇介绍了游戏实现过程中第一个比较繁琐的地方,现在展现在玩家面前的是一个有血有肉的棋盘,从某种意义上说玩家已经可以开始游戏了,但是不够人性化,玩家只能一个一个节点的点开,然后判断,然后标 ...

  10. EF+WCF怎样更新数据?

    public virtual void Update(T entity) { T current = this.Where(m => m.Id.Equals(entity.Id)) .Singl ...