【题目链接】: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



【完整代码】

#include <bits/stdc++.h>
using namespace std;
#define rep1(i,x,y) for (int i = x;i <= y;i++)
#define LL long long const int N = 2e5+100; LL k,tot,a[N];
int num[N],n;
map <int,int> dic; LL ju(LL x)
{
LL cur = 0,xyx = 0;
rep1(i,1,tot) a[i] = 0;
int l = 1;
rep1(i,1,n)
{
cur += a[num[i]];
a[num[i]]++;
while (cur>x)
{
a[num[l]]--;
cur-=a[num[l]];
l++;
}
xyx+=i-l+1;
}
return xyx;
} int main()
{
//freopen("D:\\rush.txt","r",stdin);
int T;
cin >> T;
while (T--)
{
dic.clear();
tot = 0;
cin >> n >> k;
rep1(i,1,n)
{
int x;
cin >> x;
if (dic.find(x)==dic.end()) dic[x]=++tot;
num[i] = dic[x];
}
LL l = 0,r = 1LL*n*(n-1)/2,ans = 0;
while (l <= r)
{
LL m = (l+r)>>1;
if (ju(m)>=k)
{
ans = m;
r = m-1;
}
else
l = m+1;
}
cout << ans << endl;
}
return 0;
}

【[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. ZOJ 3814 Sawtooth Puzzle (2014年牡丹江赛区网络赛F题)

    1.题目描写叙述:点击打开链接 2.解题思路:本题是一道隐式图的搜索题目.一般来说,这类题目首先要定义状态,接下来是弄清楚状态怎样转移,以及状态怎样判重,怎样推断当前状态是否和目标状态同样.至于求解最 ...

  2. HTML文档基础

    一.HTML(Hyper Text Markup Language超文本标记语言)是一种用来制作超文本文档的简单标记语言,HTML在正文的文本中编写各种标记,通过Web浏览器进行编译和运行才干正确显示 ...

  3. pass an instance of class to TestCase as parameter

    use testcasesource instead https://stackoverflow.com/questions/4220943/how-to-pass-dynamic-objects-i ...

  4. 0.0.0.0 IPAddress.Any 【】127.0.0.1 IPAddress.Loopback 【】localhost

    0.0.0.0  IPAddress.Any https://msdn.microsoft.com/en-us/library/system.net.ipaddress.any(v=vs.110).a ...

  5. POJ 2728(最优比率生成树+01规划)

                                                                                                    Dese ...

  6. hdu 1075(字典树)

    What Are You Talking About Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 102400/204800 K ...

  7. hdu 5823 color II —— 子集DP

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5823 看博客:http://www.cnblogs.com/SilverNebula/p/5929550. ...

  8. GROUPPING和ROLLUP的基本知识

    1.GROUPPING 是一个聚合函数,它产生一个附加的列,当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0. ...

  9. html5 窗口之间的通信

    一般窗口通信分为三种: iframe嵌套:多个iframe之间通信. 父页面操作子页面元素:oFrame.contentWindow.document.body. 父页面调用子页面方法:oFrame. ...

  10. [Apple开发者帐户帮助]六、配置应用服务(1.1)Apple Pay:配置Apple Pay(iOS,watchOS)

    Apple Pay允许用户在您的应用中购买商品和服务.要将Apple Pay 权利添加到您的App ID,请先创建商家标识符,然后启用Apple Pay并创建付款处理证书. 或者,您可以使用Xcode ...