Bryce1010模板

http://acm.hdu.edu.cn/showproblem.php?pid=6058

/*
思路是:找出每个x为第k大的区间个数有多少
用pos[i]保存当前x的位置,pre[i]表示向x的左侧扩展k个,next[i]表示向x的右侧扩展k个
然后计算出在左侧到右侧这个范围有多少个区间数符合条件
计算出结果后将pre和next后挪以为,接着计算下一个值
*/ #include<bits/stdc++.h>
using namespace std; #define ll long long
const int MAXN=5e5+10;
ll pos[MAXN+10];
ll pre[MAXN+10];
ll nxt[MAXN+10];
ll l[MAXN+10],r[MAXN+10];
ll n,k,x; void del(int x)
{
pre[nxt[x]]=pre[x];
nxt[pre[x]]=nxt[x];
} ll cal(ll x)
{
ll cnt=0;
ll 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;
}
//计算从左侧区间到右侧区间的区间数
for(int i=1;i<=c1;i++)
{
if(k-i+1<=c2)
cnt=cnt+l[i]*r[k-i+1];
}
return cnt;//返回区间数量 } int main()
{
int t;
cin>>t;
while(t--)
{
//ll n,k,x;
ll ans=0;
scanf("%lld%lld",&n,&k);
for(int i=1;i<=n;i++)
{
cin>>x;
pos[x]=i;
pre[i]=i-1;
nxt[i]=i+1;
}
pre[0]=0;nxt[n+1]=n+1;
for(int i=1;i<=n;i++)//计算每个x的区间数
{
ll cnt=cal(pos[i]);
// cout<<cnt<<endl;
ans+=cnt*i;
del(pos[i]);
}
cout<<ans<<endl;
} return 0;
}

HDU - 6058 Kanade's sum的更多相关文章

  1. HDU 6058 - Kanade's sum | 2017 Multi-University Training Contest 3

    /* HDU 6058 - Kanade's sum [ 思维,链表 ] | 2017 Multi-University Training Contest 3 题意: 给出排列 a[N],求所有区间的 ...

  2. hdu 6058 Kanade's sum(模拟链表)

    Kanade's sum Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  3. HDU 6058 Kanade's sum 二分,链表

    Kanade's sum Problem Description Give you an array A[1..n]of length n. Let f(l,r,k) be the k-th larg ...

  4. HDU 6058 Kanade's sum —— 2017 Multi-University Training 3

    Kanade's sum Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  5. 【链表】2017多校训练三 HDU 6058 Kanade's sum

    acm.hdu.edu.cn/showproblem.php?pid=6058 [题意] 给定一个排列,计算 [思路] 计算排列A中每个数的贡献,即对于每个ai,计算有ni个区间满足ai是区间中的第k ...

  6. 2017ACM暑期多校联合训练 - Team 3 1003 HDU 6058 Kanade's sum (模拟)

    题目链接 Problem Description Give you an array A[1..n]of length n. Let f(l,r,k) be the k-th largest elem ...

  7. hdu 6058 Kanade's sum (计算贡献,思维)

    题意: 给你一个全排列,要你求这个序列的所有区间的第k大的和 思路:比赛的时候一看就知道肯定是算贡献,也知道是枚举每个数,然后看他在多少个区间是第K大,然后计算他的贡献就可以了,但是没有找到如何在o( ...

  8. 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 ...

  9. hdu6058 Kanade's sum 区间第k大

    /** 题目:Kanade's sum 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6058 题意:给定[1,n]的排列,定义f(l,r,k)表示区间[l ...

随机推荐

  1. FIR300M刷openwrt

    淘宝看到一款FIR300M路由器,当时只要19.9元.图便宜就买了. Hardware Architecture: MIPS Vendor: MediaTek (Ralink) Bootloader: ...

  2. linux块设备驱动(一)——块设备概念介绍

    本文来源于: 1. http://blog.csdn.net/jianchi88/article/details/7212370 2. http://blog.chinaunix.net/uid-27 ...

  3. appium server参数

    转自: http://m.blog.csdn.net/blog/kittyboy0001/40893979 appium Appium是一个开源的,适用于原生或混合移动应用应用( hybrid mob ...

  4. Domino函件收集器的配置及使用方法

     [背景] 今天一个朋友问我这样一个问题,他们OA的应用数据库和接口数据库部署在两台不同的server. 接口server主要负责和第三方系统进行集成,第三方系统调接口创建OA单据,OA系统进行审 ...

  5. asp.net连接Access数据库实现登陆功能

    这里话就不多说了,直接演示代码. 连接access数据库首先需要配置web.config <appSettings> <add key="AccessConnString& ...

  6. Immutable学习及 React 中的实践

    为什么用immutable.js呢.有了immutable.js可以大大提升react的性能. JavaScript 中的对象一般是可变的(Mutable),因为使用了引用赋值,新的对象简单的引用了原 ...

  7. (24) java web的struts2框架的使用-action参数自动封装与类型转换

    structs可以对参数进行自动封装,做法也很简单. 一,action参数自动封装: 1,可以直接在action类中,声明public的属性,接受参数. 2,属性也是是private,如果是priva ...

  8. REST的本质,就是用户操作某个网络资源(具有独一无二的识别符URI),获得某种服务,也就是动词+资源(都是HTTP协议的一部分)

    REST的名称”表现状态转化”中,省略了主语.”表现”其实指的是资源的表现. 资源就是网络上的一个数据实体,或者说是一个具体信息.它可以是一段文本.一张图片.一首歌曲.一种服务.你可以用一个URI(统 ...

  9. 如何修改织梦dedecms文章标题的最大长度

    织梦dedecms默认的文章标题的最大长度为60字节,如果文章标题超过60字节将会自动截断,导致标题显示不全,这并非是我们所希望的.那么如何将标题长度改成我们想要的?只需简单两步即可解决问题. 1.进 ...

  10. springboot在eclipse实现热部署

    eclipse使用spring-tool-suite插件创建springboot项目,项目创建完成后. 选中项目,右键 Spring Tools  --> Add Boot Devtools 点 ...