ACM模版

描述

题解

我的意中人是个盖世英雄,有一天他会踩着七色的云彩来娶我,我猜中了开头,可是我猜不着这结局……

这个题我也是猜中了开头,却没有猜中结尾……

首先,很明显的一个条件是,人家要求所有子区间的第 kk 大的值的和,那么,很明显我们不能求所有子区间,我们必须求每个值的贡献才行。这个故事的开头总是如此,很容易猜到……

然后我就各种想,怎么才能优化这个贡献的查询呢?单调栈肯定不行,暴力,更不行……想来想去,始终无法使程序更优,也就 TLETLE 到了最后。

后来,发现这个题想要优化到 O(nk)O(nk) 并非难事,因为我们想要求一个值的贡献,只需要求出一个值左边比他大的 k−1k - 1 个数,右边也求出比他大的 k−1k - 1 个数,就这样,我们就能求出来他的贡献,这部分比赛时就很清楚,但是没有想到一个很重要的优化,那就是从小到大进行枚举,维护一个链表,链表中的每个数都是比这个枚举的数要大的,所以我们只需要 O(k)O(k) 复杂度就能求出来这个数的左右范围,最后复杂度自然就是 O(nk)O(nk),哎,感觉我自己好愚蠢,这么常见的优化我竟然没有想到……

代码

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>using namespace std;typedef long long ll;const int MAXN = 5e5 + 10;template <class T>
inline void scan_d(T &ret)
{char c;ret = 0;while ((c = getchar()) < '0' || c > '9');while (c >= '0' && c <= '9'){ret = ret * 10 + (c - '0'), c = getchar();}
}int n, k;
int s0, t0;
ll ans = 0;
int a[MAXN], pos[MAXN];
int pre[MAXN], ntp[MAXN];
int s[MAXN], t[MAXN];void erase(int x)
{int pp = pre[x];int nn = ntp[x];if (pre[x]){ntp[pre[x]] = nn;}if (ntp[x] <= n){pre[ntp[x]] = pp;}pre[x] = ntp[x] = 0;
}void solve()
{for (int i = 1; i <= n; i++){pre[i] = i - 1;ntp[i] = i + 1;}ans = 0;for (int num = 1; num <= n - k + 1; num++){int p = pos[num];s0 = t0 = 0;for (int d = p; d && s0 <= k + 1; d = pre[d]){s[++s0] = d;}for (int d = p; d != n + 1 && t0 <= k + 1; d = ntp[d]){t[++t0] = d;}s[++s0] = 0;t[++t0] = n + 1;for (int i = 1; i < s0; i++){if (k + 1 - i <= t0 - 1 && k + 1 - i >= 1){ans += (t[k + 1 - i + 1] - t[k + 1 - i]) * 1ll * (s[i] - s[i + 1]) * num;}}erase(p);}
}int main()
{int T;scan_d(T);while (T--){scan_d(n), scan_d(k);for (int i = 1; i <= n; i++){scan_d(a[i]);pos[a[i]] = i;}solve();cout << ans << endl;}return 0;
}

HDU-2017 多校训练赛3-1003-Kanade’s sum相关推荐

  1. HDU6578 2019HDU多校训练赛第一场 1001 (dp)

    HDU6578 2019HDU多校训练赛第一场 1001 (dp) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意: 你有n个空需要去填,有 ...

  2. 【2019杭电多校训练赛】HDU6681 / 1002-Rikka with Cake 题解(扫描线)

    [2019杭电多校训练赛]HDU6681 / 1002-Rikka with Cake 题解 题意 思路 代码 题目来自于:HDU6681 Rikka with Cake 题意 题目的大意是给定你一个 ...

  3. HDU 6134 2017 多校训练:Battlestation Operational(莫比乌斯反演+积性函数)

    实在太长了直接放题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=6134 这题就是求 考虑当Gcd(i, j)==1时,除了j为1的情况,其它时候i/j一 ...

  4. 2017 多校训练第二场 HDU 6047 Maximum Sequence(贪心+优先队列)

    Maximum Sequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  5. HDU 6180 2017 多校训练:Schedule

    题意: 和 51nod 1428 活动安排问题 一模一样,只不过还要求一个时间和 http://blog.csdn.net/jaihk662/article/details/77489061 如何求出 ...

  6. HDU 6178 2017 多校训练:Monkeys(DFS)

    题意: 有一棵n个节点的树,树上有k只猴子,这k只猴子所在位置可任意指定,但是每个点上最多只能有一只猴子,现在你要切掉尽可能多的边,但必须保证没有任何一只猴子被完全孤立,求最少得保留多少条边 题目还好 ...

  7. HDU 6166 2017 多校训练:Senior Pan(最短路)

    题意: 有一张n个点m条边的有向图,还有一个包含k个点的点集,求出这个点集中任意两点间最短路的最小值 官方题解看不懂.. 如果一条边的两个端点都在这个集合中,就将这条边直接删掉(中间记录下最小值)以后 ...

  8. HDU 6162 2017 多校训练:Ch's gift(树链剖分)

    题意: 有一棵n个节点的树,m次查询,每次查询x, y, a, b表示节点x到y的路径上所有在[a, b]范围内的权值和 树链剖分+线段树 询问离线,按a和b分别排序求出所有小于a和所有小于b+1的权 ...

  9. HDU 6170 2017 多校训练:Two strings(DP)

    题意: 给你两个字符串:第一个字符串只包含小写大写字母 第二个字符串除了字母之外,还有'.'和'*',其中'.'可以当成任意一个字符,'*'表示前面那个字符可以重复若干次 当然也可以重复0次,例如a. ...

  10. (2017多校训练第四场)HDU - 6078 Wavel Sequence dp

    传送门:点击打开链接 定义状态dp[i][j][0]表示以a[i],b[j]结尾的且为波谷的情况总和,dp[i][j][1] 为波峰. 对于某个i,j满足a[i] == b[j],则dp[i][j][ ...

最新文章

  1. ce变速注入dll失败_[LAB]一种无痕Dll模块注入方式
  2. java员工实体模型_Java持久性、db实体与其他模型之间的通信
  3. 基于可靠消息方案的分布式事务(四):接入Lottor服务
  4. 权重初始化时除以前一层的神经元个数开方的意义
  5. PhantomJS的使用
  6. max unity 方向_在2D游戏中实现方向光照
  7. Pairs Forming LCM(素因子分解)
  8. python计算机代码_python告白代码,只属于程序员的浪漫
  9. package.json 入门
  10. presto安装及入门
  11. Tensorflow实例,拟合二维数据
  12. 巨杉数据库入选Gartner报告,中国数据库原创力量崛起
  13. EDA设计流程是怎样的,看完这篇文章就知道了
  14. m3u8视频下载工具
  15. 荣耀智慧屏搭载了鸿蒙os吗,荣耀智慧屏尝鲜鸿蒙OS “一招鲜”能否吃遍天
  16. java怎么实现简体繁体切换_java代码实现简体繁体转换
  17. win10启动项_win10系统开机启动项的设置教程
  18. 既然心里活着的还是那个年轻人,我们申请跟未来的“小程序员”们一起过个节...
  19. 【socket】socket介绍-socket与http服务通信
  20. INSEC WORLD丨【漏洞攻防与安全研究论坛】演讲实录精选

热门文章

  1. 显示360阻止html打开,360启动不了 怎么让360安全浏览器不开机启动
  2. 盗销苹果ID成黑色产业链
  3. 深圳南山科技园一公司年终发10台高尔夫奖优秀员工
  4. 布尔运算,位运算,逻辑运算
  5. 求一份网页设计结课大作业,要求用到html,css,javascript,的知识
  6. 风光储互补系统直流微电网simulink仿真模型 光伏系统通过boost电路升压并入母线,采用扰动观察法实现最大功率跟踪控制
  7. Spring Boot - security 实战与源码分析
  8. poco mysql 安装,poco linux安装
  9. 微信小程序WebSocket接口以及在小程序中的使用。
  10. C++ hpp 文件