1. /**
  2. 题目:Kanade's sum
  3. 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6058
  4. 题意:给定[1,n]的排列,定义f(l,r,k)表示区间[l,r]内的第k(k <= min(n,80))大的数,如果[l,r]没有k个数,那么为0,。给定一个k,求所有f(l,r,k)的和。
  5. 思路:从小到大枚举数x,维护一个>=x的链表,跳k个查询左边>x的k个,右边>x的k个。计算之后,O(1)删除x。
  6. 比赛的时候,,刚好反过来了,用的是从大到小用set,二分位置,再迭代器枚举,然后超时了。
  7. eg:
  8. x=1,那么其他数都>x,所以直接x的左边右边各找k个,删除1之后,最小数为2,那么仍然ta的左边和右边各找k个,继续删除,依次操作。
  9.  
  10. */
  11.  
  12. #include<iostream>
  13. #include<cstdio>
  14. #include<algorithm>
  15. #include<map>
  16. #include<vector>
  17. #include<queue>
  18. #include<set>
  19. #include<cstring>
  20. #include<cmath>
  21. using namespace std;
  22. typedef pair<int,int> P;
  23. typedef long long LL;
  24. const int mod = 1e9+;
  25. const int INF = 0x3f3f3f3f;
  26. const int maxn = 5e5+;
  27. int num[maxn];
  28. int posl[maxn], posr[maxn];
  29. int l[], r[];
  30. int li, ri;
  31. int a[maxn];
  32. void read(int &x){
  33. x = ;
  34. char c = getchar();
  35. while(c < '' || c > '') c = getchar();
  36. while(c >='' && c <= '') x = x * + c - ,c = getchar();
  37. }
  38. int main()
  39. {
  40. int T,cas = ;
  41. cin>>T;
  42. int n, k;
  43. while(T--)
  44. {
  45. read(n),read(k);
  46. int x;
  47. for(int i = ; i <= n; i++){
  48. read(x);
  49. a[i] = x;
  50. num[x] = i;
  51. }
  52. posl[] = -, posr[] = ;///虚拟节点
  53. posl[n+] = n, posr[n+] = -;
  54. for(int i = ; i <= n; i++){
  55. posl[i] = i-;
  56. posr[i] = i+;
  57. }
  58. LL ans = ;
  59. for(int i = ; i <= n; i++){
  60. li = ri = ;
  61. int cnt = k+, pos = num[i];
  62. while(cnt&&pos!=-){
  63. l[li++] = pos;
  64. pos = posl[pos];
  65. cnt--;
  66. }
  67. cnt = k+;
  68. pos = num[i];
  69. while(cnt&&pos!=-){
  70. r[ri++] = pos;
  71. pos = posr[pos];
  72. cnt--;
  73. }
  74. LL cn = ;
  75. for(int j = li-; j >= ; j--){
  76. if(ri<k+-j) break;
  77. int lans = l[j-]-l[j];
  78. int rans = r[k+-j]-r[k-j];
  79. LL tmp = (LL)lans*rans;
  80. if(j==&&k-j==&&lans>&&rans>){
  81. tmp--;
  82. }
  83. cn += tmp;
  84. }
  85. ans += cn*i;
  86. posr[posl[num[i]]] = posr[num[i]];
  87. posl[posr[num[i]]] = posl[num[i]];
  88. }
  89. printf("%lld\n",ans);
  90. }
  91. return ;
  92. }

hdu6058 Kanade's sum 区间第k大的更多相关文章

  1. HDU3473--Minimum Sum(静态区间第k大)

    Minimum Sum Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  2. 【POJ】【2104】区间第K大

    可持久化线段树 可持久化线段树是一种神奇的数据结构,它跟我们原来常用的线段树不同,它每次更新是不更改原来数据的,而是新开节点,维护它的历史版本,实现“可持久化”.(当然视情况也会有需要修改的时候) 可 ...

  3. 【ZOJ2112】【整体二分+树状数组】带修改区间第k大

    The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with t ...

  4. POJ2104-- K-th Number(主席树静态区间第k大)

    [转载]一篇还算可以的文章,关于可持久化线段树http://finaltheory.info/?p=249 无修改的区间第K大 我们先考虑简化的问题:我们要询问整个区间内的第K大.这样我们对值域建线段 ...

  5. hdu 5919--Sequence II(主席树--求区间不同数个数+区间第k大)

    题目链接 Problem Description Mr. Frog has an integer sequence of length n, which can be denoted as a1,a2 ...

  6. HDU 2665 Kth number(主席树静态区间第K大)题解

    题意:问你区间第k大是谁 思路:主席树就是可持久化线段树,他是由多个历史版本的权值线段树(不是普通线段树)组成的. 具体可以看q学姐的B站视频 代码: #include<cmath> #i ...

  7. POJ 2104 K-th Number 主席树(区间第k大)

    题目链接: http://poj.org/problem?id=2104 K-th Number Time Limit: 20000MSMemory Limit: 65536K 问题描述 You ar ...

  8. 解决区间第K大的问题的各种方法

    例题:http://poj.org/problem?id=2104 最近可能是念念不忘,必有回响吧,总是看到区间第k大的问题,第一次看到是在知乎上有人面试被弄懵了后来又多次在比赛中看到.以前大概是知道 ...

  9. 可持久化线段树(主席树)(图文并茂详解)【poj2104】【区间第k大】

    [pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=63740442 向大(hei)佬(e)实力学(di ...

随机推荐

  1. Oracle 命令导入数据

    1.用命令进入sqlplus: sqlplus 用户名:/orcl 2.执行sql文件 sql>@D:/lanxi_his_data/V_JH_VISITINFO.sql

  2. python安装包是出现错误解决

    /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed/limits.h:168:61: fatal error: limits.h: No such file ...

  3. Razor语法(二)

    I:ASP.NET MVC3在Visual Studio 2010中的变化 在VS2010中新建一个MVC3项目可以看出与以往的MVC2发生了很明显的变化. 1.ASP.NET MVC3必要的运行环境 ...

  4. 转: 关于android 机型适配的问题

    转: http://www.csdn.net/article/2015-09-08/2825645

  5. 云计算之路-阿里云上:SLB故障引发的网站不能正常访问

    2013年8月22日23:50~23:58左右,由于阿里云SLB(负载均衡)故障造成网站不能正常访问,给大家带来了麻烦,望大家谅解! 8月19日我们收到阿里云的短信通知: 尊敬的阿里云用户:      ...

  6. SSL Pining Mode 设置iOS SSL 连接安全

    一:SSL Ping Mode 使用SSL来进行网络通信成为了很多mobile app的默认选择.最近一些文章发现:一些app并没有采用“额外的措施”来保证窃听不可以发生:这个“额外的步骤“就是SSL ...

  7. ES6 编程风格

    1.块级作用域 (1)使用let代替var 好处:变量应该只在其声明的代码块内有效:var命令存在变量提升效用,let命令没有这个问题. (2)全局常量 在let和const之间,建议优先使用cons ...

  8. 【PHP】组合条件搜索SQL

    前端html多个搜索条件组合 后台一个sql语句,很方便和简洁:仅提供思路. 也可以配合着进行分页操作,非常赞~

  9. 转:SiteMesh简介

    OS(OpenSymphony)的SiteMesh是一个用来在JSP中实现页面布局和装饰(layout and decoration)的框架组件,能够帮助网站开发人员较容易实现页面中动态内容和静态装饰 ...

  10. Linux命令-网络命令:netstat

    netstat -tlun 查看本机监听tcp.udp显示IP地址和端口号 netstat -an 可以查看本机正在连接的所有信息 netstat -rn 可以查看本机网关 windows里面的net ...