【题目链接】:http://hihocoder.com/problemset/problem/1483

【题意】



中文题

【题解】



二分最后的答案;

二分的时候;

对于每一个枚举的值x;

计算小于等于它的值(对应了若干个区间,且这些区间里面,每一个区间的价值(相同对数)都小于等于x)的区间个数ju;

如果ju>=k,则可以再变小一点,同时先记录ans=mid,否则数字变大一点;

计算小于等于x的区间个数;

可以用尺取法;

如果

l..r这个区间的值是符合要求的即区间价值≤x;



l+1..r

l+2..r

l+3..r



r..r

这r-l+1个区间肯定也是符合的;

然后右端点往右走;

新增加的区间价值,可以通过新增加的数字是什么,然后看看前面有多少个数字和它一样,通过O(1)算出来新的区间价值;

然后如果区间价值大于x了,则递增左端点;改变减少的数字的个数;减小区间价值;balabala



【Number Of WA】



0



【完整代码】

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define rep1(i,x,y) for (int i = x;i <= y;i++)
  4. #define LL long long
  5. const int N = 2e5+100;
  6. LL k,tot,a[N];
  7. int num[N],n;
  8. map <int,int> dic;
  9. LL ju(LL x)
  10. {
  11. LL cur = 0,xyx = 0;
  12. rep1(i,1,tot) a[i] = 0;
  13. int l = 1;
  14. rep1(i,1,n)
  15. {
  16. cur += a[num[i]];
  17. a[num[i]]++;
  18. while (cur>x)
  19. {
  20. a[num[l]]--;
  21. cur-=a[num[l]];
  22. l++;
  23. }
  24. xyx+=i-l+1;
  25. }
  26. return xyx;
  27. }
  28. int main()
  29. {
  30. //freopen("D:\\rush.txt","r",stdin);
  31. int T;
  32. cin >> T;
  33. while (T--)
  34. {
  35. dic.clear();
  36. tot = 0;
  37. cin >> n >> k;
  38. rep1(i,1,n)
  39. {
  40. int x;
  41. cin >> x;
  42. if (dic.find(x)==dic.end()) dic[x]=++tot;
  43. num[i] = dic[x];
  44. }
  45. LL l = 0,r = 1LL*n*(n-1)/2,ans = 0;
  46. while (l <= r)
  47. {
  48. LL m = (l+r)>>1;
  49. if (ju(m)>=k)
  50. {
  51. ans = m;
  52. r = m-1;
  53. }
  54. else
  55. l = m+1;
  56. }
  57. cout << ans << endl;
  58. }
  59. return 0;
  60. }

【[Offer收割]编程练习赛10 C】区间价值的更多相关文章

  1. hihocoder offer收割编程练习赛10 C 区间价值

    思路: 令v[l, r](0<= l <= r < n)表示区间[l,r]的价值,则长度为n的区间的价值最少为0,最多为n*(n-1)/2.整体对价值二分,求能满足sum{v[l, ...

  2. hihocoder offer收割编程练习赛11 B 物品价值

    思路: 状态压缩 + dp. 实现: #include <iostream> #include <cstdio> #include <cstring> #inclu ...

  3. 【[Offer收割]编程练习赛10 B】出勤记录II

    [题目链接]:http://hihocoder.com/problemset/problem/1482 [题意] [题解] 递推题. 每次增加3个字符中的一个;然后根据下面这个数组递推; 递推方式看程 ...

  4. hihocoder [Offer收割]编程练习赛61

    [Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素, ...

  5. hihocoder [Offer收割]编程练习赛4

    描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...

  6. [Offer收割]编程练习赛46

    [Offer收割]编程练习赛46赛后题解 A.AEIOU 分析

  7. HihoCoder1672 : 区间问题([Offer收割]编程练习赛41)(贪心)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定N个区间[Ai, Bi],请你找到包含元素最少的整数集合S,使得每个区间都至少有两个整数在S中. 例如给定三个区间[1 ...

  8. 【[Offer收割]编程练习赛11 B】物品价值

    [题目链接]:http://hihocoder.com/problemset/problem/1486 [题意] [题解] 设f[i][j]表示前i个物品,每种属性的状态奇偶状态为j的最大价值; 这里 ...

  9. [Offer收割]编程练习赛9,10

    题目1 : 闰秒 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 计算机系统中使用的UTC时间基于原子钟,这种计时方式同“地球自转一周是24小时”的计时方式有微小的偏差. ...

随机推荐

  1. STL源代码剖析 容器 stl_stack.h

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie stack ---------------------------------------- ...

  2. 用HttpCombiner来减少js和css的请问次数

    HttpCombiner也不记得是谁写的了,功能是把多个js文件或css文件合并到一块,压缩一下一起发给客户端来优化网站. 用法是这样的: <script type="text/jav ...

  3. HDU 2110-Crisis of HDU(母函数)

    Crisis of HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  4. Extjs grid 设置行字体颜色

    CustSuppGrid = Ext.create('Ext.grid.Panel', { title : '', // 标题头 iconCls : 'icon-grid', // 标题图标 stor ...

  5. Delphi7中的函数与过程(Function and Procedure)

    1.锁住空间的位置,可以选择Edit--->Lock component ,也可以在窗体设计面板下面找到组件排版功能栏,第二排里面有个带锁的图标,表示组件可以被锁住.点击一下,组件的大小和位置就 ...

  6. Codeforces--633D--Fibonacci-ish(暴力搜索+去重)(map)

    Fibonacci-ish Time Limit: 3000MS   Memory Limit: 524288KB   64bit IO Format: %I64d & %I64u Submi ...

  7. category中添加属性的简单方式

    一.概念扩充: 1.如我们所知,使用category是用来对现有类进行功能扩展,或者将类分成多模块的一种方式.由声明和实现两部分组成.可以单独写成Objiective-C File类型文件(包含.h和 ...

  8. 使用命名方式使用django的url模式

    有如下一个url配置: urlpatterns = patterns('', (r'^archive/(\d{4})/$', archive), (r'^archive-summary/(\d{4}) ...

  9. Wireshark 、HTTPWatch、Fiddler的介绍

    一.Wireshark  <TCP/IP协议监听> Wireshark(前称Ethereal)是一个网络封包分析软件.网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包 ...

  10. 7.Flask-上传文件和访问上传的文件

     1.1.上传文件和访问上传的文件 upload_file_demo.py from flask import Flask,request,render_template import os from ...