hdu6058

题意

定义 \(f(l, r, k)\) 函数为区间 \([l, r]\) 第 \(k\) 大的数,如果 \(r - l + 1 < k\),\(f = 0\) 。求 \(\sum_{l=1}^{n}\sum_{r=l}^{n}f(l, r, k)\) 。

分析

我们直接去算每个数字在多少个区间为第 \(k\) 大的数,那么一定和它前面和后面的 \(k\) 个大于它的数有关(如果有的话),现在问题就是怎么快速找出它前面和后面大于它的 \(k\) 个数。

对于 \([1, n]\) 每个数,用两个数组分别指向它所在的位置前面的值和后面的值的位置,那么从 \(1\) 到 \(n\) 计算,算完之后删掉(更改它后面的值向前的指向,更改它前面的值向后的指向),这样对于每个数向左向右最多跳 \(k\) 次。复杂度 \(O(k * n)\) 。

code

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int MAXN = 5e5 + 10;
int n, k;
int pre[MAXN], nxt[MAXN], pos[MAXN];
int l[MAXN], r[MAXN];
void del(int x) {
pre[nxt[x]] = pre[x];
nxt[pre[x]] = nxt[x];
}
ll cal(int x) {
int c1 = 0, c2 = 0;
for(int i = x; i > 0; i = pre[i]) {
l[++c1] = i - pre[i];
if(c1 == k) break;
}
for(int i = x; i <= n; i = nxt[i]) {
r[++c2] = nxt[i] - i;
if(c2 == k) break;
}
ll res = 0;
for(int i = 1; i <= c1; i++) {
if(k - i + 1 <= c2) {
res += 1LL * l[i] * r[k - i + 1];
}
}
return res;
}
int main() {
int T;
scanf("%d", &T);
while(T--) {
scanf("%d%d", &n, &k);
for(int i = 1; i <= n; i++) {
int x;
scanf("%d", &x);
pos[x] = i;
pre[i] = i - 1;
nxt[i] = i + 1;
}
pre[0] = 0; nxt[n + 1] = n + 1;
ll ans = 0;
for(int i = 1; i <= n; i++) {
ans += cal(pos[i]) * i;
del(pos[i]);
}
printf("%lld\n", ans);
}
return 0;
}

最新文章

  1. 3 django系列之Form表单在前端web界面渲染与入库保存
  2. IIS——发布网站
  3. 树莓派安装LAMP作为服务器
  4. HTML中的IE条件注释
  5. 关于svn获取获取文件时 Unable to connect to a repository at URL&quot;https://...&quot;执行上下文错误:参数错误
  6. 只有勇敢的人、鲁莽的人和绝望的人才会追求大的变革 – D.J. Anderson
  7. POJ 1716 Integer Intervals#贪心
  8. [ An Ac a Day ^_^ ] CodeForces 677B Vanya and Food Processor 模拟
  9. mybatis 详解(五)------动态SQL
  10. 《C++ Primer》学习笔记:向vector对象添加元素蕴含的编程假定
  11. python-memcached学习笔记
  12. Excel汉字转换拼音首字母缩写的函数
  13. ****** 三十 ******、软设笔记【计算机体系结构】-循环冗余校验码(CRC)
  14. solr简单搜索案例
  15. [leetcode]59. Spiral Matrix II螺旋遍历矩阵2
  16. Duplicate Manager Pro for Mac(重复文件查找工具)破解版安装
  17. aop 日志统一处理
  18. &quot;添加与删除程序&quot;报rundll32错误
  19. Redis数据类型应用场景及具体方法总结
  20. 知道WCF的地址用工厂通道方式快速调用WCF

热门文章

  1. JSP乱码问题
  2. [洛谷P4568][JLOI2011]飞行路线
  3. [NOI.AC省选模拟赛3.23] 集合 [数学]
  4. BZOJ4869 [Shoi2017]相逢是问候 【扩展欧拉定理 + 线段树】
  5. mobx基本概念
  6. COGS 930. [河南省队2012] 找第k小的数 主席树
  7. 淡入淡出效果的js原生实现
  8. Fabric证书解析
  9. POJ1087:A Plug for UNIX(最大流)
  10. nginx反向代理Tomcat/Jetty获取客户端IP地址