/*
HDU 6058 - Kanade's sum [ 思维,链表 ]  |  2017 Multi-University Training Contest 3
题意:给出排列 a[N],求所有区间的第k大数之和N <= 5e5, k <= 80
分析:先求出每个数的位置pos[]数组然后维护一个单调链表,按数字从大到小向里面加该数字的位置即对于i的位置 pos[i] 找到链表中比它大的第一个位置和比它小的第一个位置,将pos[i]加到两个之间这部分用set实现,复杂度 O(nlogn)则对于数字i,链表中所有的位置均为比i大的数的位置然后滑动窗口更新答案即维护 l,r,要求 l 到 r 之间包含 pos[i] 且恰好 k 个数,这个时候 i 就是第k小复杂度 O(nk)总复杂度 O(nlogn + nk)
*/
#include <bits/stdc++.h>
using namespace std;
const int N = 5e5+5;
int t, n, k;
int a[N], pos[N];
int pre[N], nxt[N];
set<int> st;
set<int>::iterator it;
long long ans;
void solve(int x)
{int l, r, lx, rx, cnt = k-1;l = r = x;while (cnt && pre[l] != 0) l = pre[l], cnt--;while (cnt && nxt[r] != n+1) r = nxt[r], cnt--;while (l != nxt[x]){lx = l-pre[l];rx = nxt[r]-r;ans += (long long)lx * rx * a[x];if (nxt[r] == n+1) break;l = nxt[l];r = nxt[r];}
}
int main()
{scanf("%d", &t);while (t--){st.clear();scanf("%d%d", &n, &k);for (int i = 1; i <= n; i++){scanf("%d", a+i);pos[a[i]] = i;}pre[n+1] = 0;nxt[0] = n+1;st.insert(0);st.insert(n+1);ans = 0;for (int i = n; i >= 1; i--){it = st.lower_bound(pos[i]);nxt[pos[i]] = *it;pre[*it] = pos[i];--it;pre[pos[i]] = *it;nxt[*it] = pos[i];if (n-i+1 >= k) solve(pos[i]);st.insert(pos[i]);}printf("%lld\n", ans);}
}

  

转载于:https://www.cnblogs.com/nicetomeetu/p/7271813.html

HDU 6058 - Kanade's sum | 2017 Multi-University Training Contest 3相关推荐

  1. 2017多校第3场 HDU 6058 Kanade's sum 双链表,思维

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6058 题外话:这场多校,真心感觉自己的无力,全队都发挥的很差,结束的时候排名掉到了90多,后期没做出字 ...

  2. HDU 6058 Kanade's sum 逆序求第k大

    传送门:HTTP://acm.hdu.edu.cn/showproblem.php PID = 6058 题意:给你一个1-n的排列求所有自子区间的第K大的和 思路:从大到小插入位置维护当前数位置以及 ...

  3. HDU 4888 Redraw Beautiful Drawings(2014 Multi-University Training Contest 3)

    题意:给定n*m个格子,每个格子能填0-k 的整数.然后给出每列之和和每行之和,问有没有解,有的话是不是唯一解,是唯一解输出方案. 思路:网络流,一共 n+m+2个点   源点 到行连流量为 所给的 ...

  4. 2017 Multi-University Training Contest - Team 3 Kanade's sum hd6058

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6058 题目: Kanade's sum Time Limit: 4000/2000 MS (J ...

  5. hdu 6059 Kanade's trio

    Problem acm.hdu.edu.cn/showproblem.php?pid=6059 Reference HDU 6059 Kanade's trio (字典树, 2017 Multi-Un ...

  6. HDU 6091 - Rikka with Match | 2017 Multi-University Training Contest 5

    思路来自 某FXXL 不过复杂度咋算的.. /* HDU 6091 - Rikka with Match [ 树形DP ] | 2017 Multi-University Training Conte ...

  7. HDU 6051 - If the starlight never fade | 2017 Multi-University Training Contest 2

    /* HDU 6051 - If the starlight never fade [ 原根,欧拉函数 ] | 2017 Multi-University Training Contest 2 题意: ...

  8. Sichuan University Programming Contest 2018 Preliminary

    嗯为了防止大家AK,所以这次的A题和K题我们就当做不存在好了! 经历了昨天写了两个多小时的博客没保存的心态炸裂,今天终于下了个Markdown.所以我猜这篇的格式应该会更好看一点! 好吧废话不多说 题 ...

  9. hdu 4925 Apple Tree--2014 Multi-University Training Contest 6

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4925 Apple Tree Time Limit: 2000/1000 MS (Java/Others ...

最新文章

  1. 参数调整 新部署rac_开工的欲望 | AI Studio悄然上线新功能,用你的模型生成在线预测服务...
  2. 苹果手机换了屏显示无服务器,苹果将​​为存在显示问题的iPhone 11提供免费更换...
  3. Group by优化
  4. BA(free scale) network 小结
  5. sql where中用case_从零学会SQL:求职面试题(汇总)
  6. asynchttpclient 超时_dnf这才是混子的毕业套装,却发现超时空漩涡不买账!
  7. MATLAB_平面几何_判断两平面矩形是否干涉
  8. 学习笔记 第六周 第一篇
  9. 【计算机视觉】人脸识别总结
  10. 嵌入式行业公司及所属产业
  11. 含泪推荐四款超级好用的电脑软件,值得收藏
  12. vsphere 6.5 HA 提示:此主机当前没有管理网络冗余,该主机的vSphere HA检测信号数据存储数目为0 告警消除
  13. android怎么用apk,手机如何安装APK应用教程 小白操作安卓系统教程 (全文)
  14. 分子模拟软件amber_分子模拟周刊: 第 23 期
  15. 黑吃黑第一季/全集Banshee迅雷下载
  16. 给高科技强国的后来者埋下的痛
  17. Centos7安装配置
  18. 用命令提示符运行java_怎么用命令提示符运行java程序?
  19. 工业手持PDA,你不得不知的重要性
  20. 10005---热部署

热门文章

  1. 高手教你PHP上传多张图片
  2. 使用Native API 创建进程
  3. 通过 Object.prototype.toString.call() 进行类型判断
  4. ItemCommandVSItemDataBound
  5. mysqlbinlog_flashback工具体验
  6. Spark 把RDD数据保存到hdfs单个文件中,而不是目录
  7. Thinkphp5创建控制器
  8. 深入JVM锁机制2-Lock
  9. centos 6.1_64位系统 双网卡邦定
  10. visual studio的试用版评估期已结束 解决办法