对原问题进行转化

考虑对每个$i$,询问在$j \in [i + 1, a[i]]$中满足$a[j] \geqslant i$的个数

这样子可以做到不重不漏

个数满足差分的性质,使用主席树来维护即可

复杂度$O(n \log n)$

  1. #include <vector>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <iostream>
  5. #include <algorithm>
  6. namespace remoon {
  7. #define ri register int
  8. #define ll long long
  9. #define tpr template <typename ra>
  10. #define rep(iu, st, ed) for(ri iu = st; iu <= ed; iu ++)
  11. #define drep(iu, ed, st) for(ri iu = ed; iu >= st; iu --)
  12. #define gc getchar
  13. inline int read() {
  14. int p = , w = ; char c = gc();
  15. while(c > '' || c < '') { if(c == '-') w = -; c = gc(); }
  16. while(c >= '' && c <= '') p = p * + c - '', c = gc();
  17. return p * w;
  18. }
  19. int wr[], rw;
  20. #define pc(iw) putchar(iw)
  21. tpr inline void write(ra o, char c = '\n') {
  22. if(!o) pc('');
  23. if(o < ) o = -o, pc('-');
  24. while(o) wr[++ rw] = o % , o /= ;
  25. while(rw) pc(wr[rw --] + '');
  26. pc(c);
  27. }
  28. tpr inline void cmin(ra &a, ra b) { if(a > b) a = b; }
  29. tpr inline void cmax(ra &a, ra b) { if(a < b) a = b; }
  30. tpr inline bool ckmin(ra &a, ra b) { return (a > b) ? a = b, : ; }
  31. tpr inline bool ckmax(ra &a, ra b) { return (a < b) ? a = b, : ; }
  32. }
  33. using namespace std;
  34. using namespace remoon;
  35. #define sid 10000050
  36. #define xid 200050
  37.  
  38. ll ans;
  39. int n, id;
  40. int a[xid], rt[xid];
  41. int ls[sid], rs[sid], sz[sid];
  42.  
  43. inline void insert(int &now, int pre, int l, int r, int v) {
  44. now = ++ id;
  45. ls[now] = ls[pre]; rs[now] = rs[pre];
  46. sz[now] = sz[pre] + ;
  47. if(l == r) return;
  48. int mid = (l + r) >> ;
  49. if(v <= mid) insert(ls[now], ls[pre], l, mid, v);
  50. else insert(rs[now], rs[pre], mid + , r, v);
  51. }
  52.  
  53. inline int qry(int l, int r, int ql, int qr, int ml, int mr) {
  54. if(ml > r || mr < l) return ;
  55. if(ml <= l && mr >= r) return sz[qr] - sz[ql];
  56. int mid = (l + r) >> ;
  57. int ret = qry(l, mid, ls[ql], ls[qr], ml, mr);
  58. ret += qry(mid + , r, rs[ql], rs[qr], ml, mr);
  59. return ret;
  60. }
  61.  
  62. int main() {
  63. n = read();
  64. rep(i, , n) a[i] = min(read(), n);
  65. rep(i, , n) insert(rt[i], rt[i - ], , n, a[i]);
  66. rep(i, , n) if(i + <= a[i])
  67. ans += qry(, n, rt[i], rt[a[i]], i, n);
  68. write(ans);
  69. return ;
  70. }

CF961E Tufurama 主席树的更多相关文章

  1. CF961E Tufurama【主席树】

    CF961E Tufurama 题意翻译 题目描述 有一天Polycarp决定重看他最喜爱的电视剧<Tufurama>.当他搜索“在线全高清免费观看Tufurama第3季第7集”却只得到第 ...

  2. 2018.12.05 codeforces 961E. Tufurama(主席树)

    传送门 一眼主席树sbsbsb题(%%%树状数组大佬们). 简化题意:求满足x<y,y≤ax,x≤ayx<y,y\le a_x,x\le a_yx<y,y≤ax​,x≤ay​的(x, ...

  3. 【树状数组】CF961E Tufurama

    挺巧妙的数据结构题(不过据说这是一种套路? E. Tufurama One day Polycarp decided to rewatch his absolute favourite episode ...

  4. EC Round 41 (Rated for Div. 2)主席树 E. Tufurama

    简单分析一下,对于x<y,求a[x]>=y 同时a[y]>=x 再简化一下,求1-a[y]区间内大于>=y的个数...主席树牛逼 #include<iostream> ...

  5. [CF961E] Tufurama

    Description: 有一天Polycarp决定重看他最喜爱的电视剧<Tufurama>.当他搜索"在线全高清免费观看Tufurama第3季第7集"却只得到第7季第 ...

  6. bzoj3207--Hash+主席树

    题目大意: 给定一个n个数的序列和m个询问(n,m<=100000)和k,每个询问包含k+2个数字:l,r,b[1],b[2]...b[k],要求输出b[1]~b[k]在[l,r]中是否出现. ...

  7. bzoj1901--树状数组套主席树

    树状数组套主席树模板题... 题目大意: 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]--a[ ...

  8. BZOJ 3626: [LNOI2014]LCA [树链剖分 离线|主席树]

    3626: [LNOI2014]LCA Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2050  Solved: 817[Submit][Status ...

  9. BZOJ 1146: [CTSC2008]网络管理Network [树上带修改主席树]

    1146: [CTSC2008]网络管理Network Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 3522  Solved: 1041[Submi ...

随机推荐

  1. 2016.07.15——istringstream测试

    istringstream测试 1.istringstream strcin(str),字符串(str)可以包括多个单词,单词之间使用空格分开 #include "stdafx.h" ...

  2. aarch64_g4

    golang-github-inconshreveable-muxado-devel-0-0.7.gitf693c7e.fc26.noarch.rpm 2017-02-11 16:47 30K fed ...

  3. mycat读写分离与主从切换【转】

    什么是mycat,以及mycat的优点和特性本文不做赘述,本文继续本着实战的态度,来分享一些个人对mycat的基础功能实践.本文mycat的读写分离和主从切换的环境为mysql主从环境. 如何安装my ...

  4. 好用的工具---screen命令

    问 题场景:要在服务器上配置环境,但是我的电脑无法直接连到服务器上,通常要经过好几次ssh跳转.配环境需要设置好几个用户,这自然需要同时打开好几个连 接服务器的终端窗口,每个连接到服务器的终端窗口都要 ...

  5. MYSQL-重做系统恢复MYSQL过程

    记笔记是好习惯,记笔记是好习惯,记笔记是好习惯! 重要的事情说三遍. 说多了都是泪.第一次装MYSQL时候就遇到了很多问题,当时解决了忘记记录了.家里硬盘满了,于是买了个4T的硬盘重装系统.重装系统后 ...

  6. MFC中CString.Format类详解

    在MFC程序中,使用CString来处理字符串是一个很不错的选择.CString既可以处理Unicode标准的字符串,也可以处理ANSI标准的字符串.CString的Format方法给我们进行字符串的 ...

  7. MySQL 连接本地数据库、远程数据库命令

    一.MySQL 连接本地数据库,用户名为“root”,密码“123”(注意:“-p”和“123” 之间不能有空格) C:/>mysql -h localhost -u root -p123 二. ...

  8. OA项目CRUD和单元测试(一)

    使用ModeFirst方法生成数据库,EntityFramework5.0. 一:Model层的模型:(根据模型生成数据库) 二:Dal层的UserInfo代码: namespace SunOA.EF ...

  9. Spring MVC之JSON数据交互和RESTful的支持

    1.JSON概述 1.1 什么是JSON JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式.它是基于JavaScript的一个子集,使用了C.C ...

  10. 浅谈C、C++及其区别、兼容与不兼容

    一.闲说C C语言之所以命名为C,是因为C语言源自Ken Thompson发明的B语言,而 B语言则源自BCPL语言. 1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是 ...