CF840D Destiny
题意简述:多次询问求出一个区间最小的出现次数严格大于 \(\frac{r-l+1}{k}\ (2\leq k\leq 5)\) 的最小的数。无解输出 \(-1\)。
注意到这个 \(k\) 很小,那么就要让正解尽量往上靠:设 \(d\) 为严格大于 \(\frac{r-l+1}{k}\) 的最小数。如果一个数 \(x\) 出现了 \(d\) 次,那么我们从小到大每隔 \(d-1\) 个数取出一个数(即取出第 \(1,1+d,1+2d,\cdots\) 小的数 ),\(x\) 必定出现在所有取出的数中。这个结论是显然的,因为如果 \(x\) 没有出现,那么 \(x\) 在整个区间的出现次数最多为 \(d-1\)。
这样就将题目转化为了区间 kth + 区间出现次数的主席树裸题。时间复杂度 \(\mathcal{O}(kn\log n)\)。
/*
Powered by C++11.
Author : Alex_Wei.
*/
#include <bits/stdc++.h>
using namespace std;
const int N=3e5+5;
int n,m,node,rt[N],val[N<<5],ls[N<<5],rs[N<<5];
void upd(int x){
val[x]=val[ls[x]]+val[rs[x]];
}
void ins(int l,int r,int p,int &x,int pre){
val[x=++node]=val[pre];
if(l==r)return val[x]++,void();
int m=l+r>>1;
if(p<=m)ins(l,m,p,ls[x],ls[pre]),rs[x]=rs[pre];
else ins(m+1,r,p,rs[x],rs[pre]),ls[x]=ls[pre];
upd(x);
}
int query(int l,int r,int k,int x,int y){
if(l==r)return l;
int m=l+r>>1,sz=val[ls[y]]-val[ls[x]];
if(sz<k)return query(m+1,r,k-sz,rs[x],rs[y]);
return query(l,m,k,ls[x],ls[y]);
}
int check(int l,int r,int p,int x,int y){
if(l==r)return val[y]-val[x];
int m=l+r>>1;
if(p<=m)return check(l,m,p,ls[x],ls[y]);
return check(m+1,r,p,rs[x],rs[y]);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)ins(1,n,read(),rt[i],rt[i-1]);
for(int i=1;i<=m;i++){
int l=read(),r=read(),k=read();
int rk=1,ans=-1,nd=(r-l+1)/k+1;
while(rk<=r-l+1){
int q=query(1,n,rk,rt[l-1],rt[r]);
if(check(1,n,q,rt[l-1],rt[r])>=nd){
ans=q;
break;
} rk+=nd;
} printf("%d\n",ans);
}
return 0;
}
CF840D Destiny的更多相关文章
- CF840D[Destiny] [主席树板子]
模板题,提供两种思路. 1.考虑它求得是 出现个数\(>\lfloor \frac{r-l+1}{k}\rfloor\) 的最小值 那么我们可以根据如果大于这个数那么你把这个区间数列排好序然后分 ...
- 【CF840D】Destiny 分治(线段树)
[CF840D]Destiny 题意:给你一个长度为n的序列,q次询问,每次指定l r k,求[l,r]中出现次数$>\frac {r-l+1} k$的所有数中最小的那个数. $n,q\le 3 ...
- Codeforces Round #429 (Div. 2/Div. 1) [ A/_. Generous Kefa ] [ B/_. Godsend ] [ C/A. Leha and Function ] [ D/B. Leha and another game about graph ] [ E/C. On the Bench ] [ _/D. Destiny ]
PROBLEM A/_ - Generous Kefa 题 OvO http://codeforces.com/contest/841/problem/A cf 841a 解 只要不存在某个字母,它的 ...
- UESTC 919 SOUND OF DESTINY --二分图最大匹配+匈牙利算法
二分图最大匹配的匈牙利算法模板题. 由题目易知,需求二分图的最大匹配数,采取匈牙利算法,并采用邻接表来存储边,用邻接矩阵会超时,因为邻接表复杂度O(nm),而邻接矩阵最坏情况下复杂度可达O(n^3). ...
- Solution -「原创」Destiny
题目背景 题目背景与题目描述无关.签到愉快. 「冷」 他半靠在床沿,一缕感伤在透亮的眼眸间荡漾. 冷见惆怅而四散逃去.经历嘈杂喧嚣,感官早已麻木.冷又见空洞而乘隙而入.从里向外,这不是感官的范畴. 他 ...
- linux查看端口及端口详解
今天现场查看了TCP端口的占用情况,如下图 红色部分是IP,现场那边问我是不是我的程序占用了tcp的链接,,我远程登陆现场查看了一下,这种类型的tcp链接占用了400多个,,后边查了一下资料,说E ...
- Best code水题之路
BestCoder 2nd Anniversary: 1001.Oracle There is once a king and queen, rulers of an unnamed city, wh ...
- Unbroken(坚不可摧)——Mateusz M
Unbroken(坚不可摧)——Mateusz M YouTube励志红人账号Mateusz M 的作品,短片由几位演讲家Les Brown.Eric Thomas.Steve Jobs.Louis ...
- 7 COMPELLING REASONS YOU NEED TO START THE BUSINESS YOU’VE ALWAYS WANTED
原文链接:http://lesseesadvocate.com/7-compelling-reasons-need-start-business-youve-always-wanted/ Don’t ...
随机推荐
- C#与java TCP通道加密通信
背景说明 公司收费系统需要与银行做实时代收对接,业务协议使用我们收费系统的标准.但是银行要求在业务协议的基础上,使用银行的加密规则. 采用MD5计算报文摘要,保证数据的完整性 采用RSA256对摘要进 ...
- vue介绍啊
声明式渲染:vue的核心是一个允许你才用一个简洁的模板语法来声明式的将数据渲染进行DOM的系统 html部分:<div id="app"> {{message}}< ...
- Selenium获取动态图片验证码
Selenium获取动态图片验证码 关于图片验证码的文章,我想大家都有一定的了解了. 在我们做UI自动化的时候,经常会遇到图片验证码的问题. 当开发不给咱们提供万能验证码,或者测试第三方网站比如知乎的 ...
- pycharm 服务器连接及一些问题解决
主要介绍一下如何使用pycharm连接服务器并在服务器上炼丹,并对遇到的一个小问题进行说明. 目录 1,SSH连接 2,linux常用命令 3,配置anaconda 4,运行代码 5,一个常见错误 1 ...
- 网格布局GirdLayout在py中的引用,用于多行多列矩阵
""" GridLayout为网格布局为了部件为多行距阵 """ from kivy.uix.gridlayout import GridL ...
- [no code][scrum meeting] Beta 8
$( "#cnblogs_post_body" ).catalog() 例会时间:5月22日15:30,主持者:赵涛 下次例会时间:5月23日11:30,主持者:肖思炀 一.工作汇 ...
- [no_code]OCR表格处理——技术规格说明书
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 技术规格说明书 我们在这个课程的目标是 远程协同工作,采用最新技术开发软件 这个作业在哪个具体方面 ...
- BUAA2020软工作业(五)——软件案例分析
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 软件案例分析作业 我在这个课程的目标是 进一步提高自己的编码能力,工程能力 这个作业在哪个具体方面 ...
- Noip模拟21(持续翻车)2021.7.20
读题总是读错是不是没救了... T1 Median 中位数:按顺序排列的一组数据中居于中间位置的数. 能用上的高亮符号都用上了... 当时忘了就离谱.... 理解什么是中位数(真是个憨憨)后就可以开始 ...
- python +spatialite + window 解决方案(https://www.jianshu.com/p/5bc7d8b7b429)
运行环境在windows 10 64bit.先将python安装完成.然后,到 spatilite官网 找到MS(即Microsoft)版本,下载64位的mod_spatialite,将其先解压到目标 ...