HDU6058 [2017多校联合3] Kanade's sum 我可能是个假链表
来源:互联网 发布:淘宝的xbox手柄 编辑:程序博客网 时间:2024/06/08 12:20
Kanade's sumhttp://acm.hdu.edu.cn/showproblem.php?pid=6058
题意:给array A[1..n],定义f(l,r,k)为区间A[l..r]中第k大的元素
(当[l..r]中元素不满足k个时,f()=0),计算
分析:计算所有可组成的连续区间中,第k大的元素之和
等价于==>对每一元素,当它为第k大时所在的区间个数*它本身(A[1..n]是数字从1到n的排列)
Sample Imput
1
5 2
1 2 3 4 5
Sample Output
30【=1(1,2)+2*2(2,3),(1,2,3)+3*3(3,4),(2,3,4),(1,2,3,4)+4*4(4,5),(3,4,5),(2,3,4,5),(1,2,3,4,5)】
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn=500009;int T,n,k,a[maxn],pos[maxn],pre[maxn],np[maxn];int s[maxn],t[maxn];long long ans=0;int main(){ scanf("%d",&T); while(T--) { scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); pos[a[i]]=i;//记录元素位置 pre[i]=i-1;//链表前驱 np[i]=i+1;//链表后继 } ans=0; int s0=0,t0=0; for(int num=1;num<=n-k+1;num++)//枚举可能成为第k大的数[1..n-k+1] { int p=pos[num];//元素num的位置 //??? s0=0,t0=0; //寻找前后k个比它大的数 for(int i=p;i&&s0<=k+1;i=pre[i]) s[++s0]=i; for(int j=p;j<=n&&t0<=k+1;j=np[j]) t[++t0]=j; //首尾额外添加两个无限大的数 s[++s0]=0; t[++t0]=n+1; for(int i=1;i<=s0-1;i++) { int tmp=k-i+1; if(tmp<=t0-1&&tmp>0) ans+=(s[i]-s[i+1])*1LL*(t[tmp+1]-t[tmp])*num; //*1LL是为了在计算时,把int类型的变量转化为long long,然后再赋值给long long类型的变量 } //从链表中将此数删除 int tpre=pre[p]; int tnp=np[p]; if(tpre) np[tpre]=tnp; if(tnp<=n) pre[tnp]=tpre; pre[p]=np[p]=0; //??? } printf("%I64d\n",ans); } return 0;}
阅读全文
0 0
- HDU6058 [2017多校联合3] Kanade's sum 我可能是个假链表
- HDU6058-Kanade's sum
- hdu6058-Kanade's sum
- hdu6058 Kanade's sum
- HDU6058-Kanade's sum
- HDU6058 Kanade's sum
- HDU6058-Kanade's sum
- HDU6058 Kanade's sum
- hdu6058 Kanade's sum
- 2017多校训练Contest3: 1003 Kanade's sum hdu6058
- Hdu6058 Kanade's sum(2017多校第3场)
- 【2017多校】HDU6058 Kanade's sum 【链表】
- HDU6058 Kanade's sum【模拟】
- 2017 HDU 6058 多校联合赛 Kanade's sum
- HDU6058 2017杭电多校联赛第三场-Kanade's sum
- 2017杭电多校联赛team3 Kanade's sum hdu6058 快速幂
- 【HDU6058】Kanade's sum(暴力 or 链表)
- HDU6058-Kanade's sum 链表+思维
- 笨办法学 Python · 续 练习 5:`cat`
- 触摸屏驱动设计----输入子系统模型
- H5 文件下载
- 一、java运行环境安装之-linux centos6.6安装mysql 5.6安装步骤【rpm安装方式】
- H5通过浏览器录制视屏或音频
- HDU6058 [2017多校联合3] Kanade's sum 我可能是个假链表
- AOJ894 种花【图的搜索+回溯】
- Lambda表达式
- HDU1042 N!
- 六.gradle的自定义任务
- 邻接矩阵 建图
- 关于前端脚手架yeoman的使用
- Java 7之基础
- 再谈FFT,不过如此。应该是这个题简单