题意:略

  思路:要我们求每个区间第K大数之和,其实可以转换为求多少个区间的第K大数是X,然后我们在求和就好了。

     那么我们可以从小到大枚举所有可能成为第K大的数。为什么从小到大呢?

     因为从小到大我们就略去了大小的比较了,后面我们维护的链表就要把这个值除去。

  1. /* gyt
  2. Live up to every day */
  3. #include<cstdio>
  4. #include<cmath>
  5. #include<iostream>
  6. #include<algorithm>
  7. #include<vector>
  8. #include<stack>
  9. #include<cstring>
  10. #include<queue>
  11. #include<set>
  12. #include<string>
  13. #include<map>
  14. #include <time.h>
  15. #define PI acos(-1)
  16. using namespace std;
  17. typedef long long ll;
  18. typedef double db;
  19. const int maxn = +;
  20. const ll maxm = 1e7;
  21. const int modd = ;
  22. const int INF = <<;
  23. const db eps = 1e-;
  24. int pos[maxn], pre[maxn], nex[maxn];
  25.  
  26. void solve() {
  27. int n, k; scanf("%d%d", &n, &k);
  28. for (int i=; i<=n; i++) {
  29. int x; scanf("%d", &x);
  30. pos[x]=i; pre[i]=i-, nex[i]=i+;
  31. }
  32. pre[]=; nex[n+]=n+;
  33. ll sum=;
  34. for (int j=; j<=n; j++) {
  35. int x=pos[j];
  36. int rq[];
  37. int lc=, rc=;
  38. // cout<<"x:"<<x<<endl;
  39. for (int i=x; i<=n&&rc<k; i=nex[i]) {
  40. rq[++rc]=nex[i]-i;
  41. // cout<<nex[i]<<" "<<i<<endl;
  42. }
  43. ll ans=;
  44. for (int i=x; i>&&lc<k; i=pre[i]) {
  45. lc++;
  46. int r=k-lc+;
  47. if (r>rc) continue;
  48. ans+=(i-pre[i])*rq[r];  //前面有多少个比他小的数,我们就可以构成那么多的区间
  49. //cout<<"ans:"<<ans<<endl;
  50. //cout<<(i-pre[i])<<" "<<rq[r]<<endl;
  51. }
  52. //cout<<"rc:"<<rc<<" lc:"<<lc<<endl;
  53. sum+=ans*j;
  54. pre[nex[x]]=pre[x];
  55. nex[pre[x]]=nex[x];
  56. //cout<<j<<" "<<ans<<endl;
  57. //cout<<"---------------"<<endl;
  58. }
  59. cout<<sum<<endl;
  60. }
  61. int main() {
  62. int t = ;
  63. //freopen("in.txt", "r", stdin);
  64. scanf("%d", &t);
  65. //getchar();
  66. while(t--)
  67. solve();
  68. return ;
  69. }

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. HDU - 6058 Kanade's sum

    Bryce1010模板 http://acm.hdu.edu.cn/showproblem.php?pid=6058 /* 思路是:找出每个x为第k大的区间个数有多少 用pos[i]保存当前x的位置, ...

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

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

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

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

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

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

  10. 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. 如何正确获取MYSQL的ADO连接字符串

    首先你正确安装了MYSQL的数据库驱动程序(mysql-connector-odbc-5.3.2-win32.msi )http://dev.mysql.com/downloads/connector ...

  2. sourceforge

    sourceforge SourceForge.net,又称SF.net,是开源软件开发者进行开发管理的集中式场所. SourceForge.net由VA Software提供主机,并运行Source ...

  3. mac上为nodejs设置环境变量

    Mac下面的环境变量设置和Linux差不多,一般为这几个文件(左边的先加载): /etc/profile /etc/paths ~/.bash_profile ~/.bash_login ~/.pro ...

  4. python中类变量和成员变量、局部变量总结

    class Member(): num= #类变量,可以直接用类调用,或用实例对象调用 def __init__(self,x,y): self.x=x #实例变量(成员变量),需要它是在类的构造函数 ...

  5. [leetcode]304. Range Sum Query 2D - Immutable二维区间求和 - 不变

    Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...

  6. Dockerfile里指定执行命令用ENTRYPOING和用CMD有何不同?

    结论:运行时机不太一样. RUN是在Build时运行的,先于CMD和ENTRYPOINT.Build完成了,RUN也运行完成后,再运行CMD或者ENTRYPOINT. ENTRYPOINT和CMD的不 ...

  7. bean生命周期_Junit测试使用factory模式

    在面试某互联网_保险 公司, 被问到了spring中bean的生命周期,不禁联想到我们之前作 junit测试时,使用了Factory模式,而没有用Mock.

  8. Windows系统崩溃后快速恢复Oracle数据库的妙招

    Windows系统崩溃后快速恢复Oracle数据库,以下是操作步骤 假设oracle数据安装在d:\\oracle文件夹中,数据库名称orcl 1>将崩溃的数据库安装目录"d:\\or ...

  9. gRPC的.netClient客户端第一次连接出现StatusCode=Unavailable的解决办法?

    1.问题还原: The service does not automatically connect, free after a period of time, the first call will ...

  10. MVC是架构模式,而不是设计模式

    最早学编程的时候看过一些书,印象深刻的一本书<设计模式解析>,那本书给我后来的工作提供了很大的帮助. 他叫我站在问题模型的立场上指定解决方法,也教会了我软件设计中每个问题都可以细化到到不可 ...