【CF1181D】Irrigation
题目大意:给定 M 个城市,每年会选出一个城市举办比赛,现给出前 N 年城市举办比赛的情况。在接下来的年份中,每年会在举办比赛次数最小的城市举办比赛,如果有很多城市举办次数均为最小值,则在编号最小的城市举办比赛。现给出 Q 个询问,每次询问第 K 年在哪个城市举办比赛。
题解:
首先,记录下每个城市前 N 年举办比赛的次数,并按照举办比赛的次数为第一关键字,城市编号为第二关键字进行从小到大排序。
发现排序后城市举办比赛的情况如下图所示

那么若当前矩形高度小于下一个小矩形高度时,一定是当前矩形高度增加,且对于大矩形内的小矩形高度呈现周期性增加。
因此,可以采用将询问离线,并将问题划分为前 i 个高度均为 h[i] 的矩形到前 i+1 个高度均为 h[i+1] 的矩形的时间。对于每个划分出来的子问题,i 个小矩形高度呈现周期性变化,可以利用取模操作得到第几个矩形高度增加。需要注意的是,这里面的第 i 个矩形为相对下标,还需要转化成具体是第几个城市,这里可以采用权值线段树上二分的操作,求出第 k 个数对应的下标即可。
代码如下
#include <bits/stdc++.h>
using namespace std;
const int maxn=5e5+10;
typedef long long LL;
int n,m,Q,sz[maxn<<2],ans[maxn];
struct city{int cnt,id;}c[maxn];
struct qry{int id;LL year;}q[maxn];
void insert(int o,int l,int r,int pos){
if(l==r){++sz[o];return;}
int mid=l+r>>1;
if(pos<=mid)insert(o<<1,l,mid,pos);
else insert(o<<1|1,mid+1,r,pos);
sz[o]=sz[o<<1]+sz[o<<1|1];
}
int kth(int o,int l,int r,int k){
if(l==r)return l;
int mid=l+r>>1;
if(k<=sz[o<<1])return kth(o<<1,l,mid,k);
else return kth(o<<1|1,mid+1,r,k-sz[o<<1]);
}
void read_and_parse(){
scanf("%d%d%d",&n,&m,&Q);
for(int i=1;i<=n;i++){
int x;scanf("%d",&x);
++c[x].cnt;
}
for(int i=1;i<=m;i++)c[i].id=i;
for(int i=1;i<=Q;i++){
LL year;scanf("%lld",&year);
q[i].id=i,q[i].year=year;
}
sort(c+1,c+m+1,[](const city &a,const city &b){
return a.cnt==b.cnt?a.id<b.id:a.cnt<b.cnt;
});
sort(q+1,q+Q+1,[](const qry &a,const qry &b){
return a.year<b.year;
});
}
void solve(){
LL now=n;
for(int i=1,j=1;i<=m;i++){
LL nxt=i==m?2e18:(LL)(c[i+1].cnt-c[i].cnt)*i+now;
insert(1,1,m,c[i].id);
while(j<=Q&&q[j].year<=nxt){
LL year=q[j].year;
int idx=(year-now)%i;
if(idx==0)idx=i;
ans[q[j].id]=kth(1,1,m,idx);
++j;
}
now=nxt;
}
for(int i=1;i<=Q;i++)printf("%d\n",ans[i]);
}
int main(){
read_and_parse();
solve();
return 0;
}
【CF1181D】Irrigation的更多相关文章
- 【转】并查集&MST题集
转自:http://blog.csdn.net/shahdza/article/details/7779230 [HDU]1213 How Many Tables 基础并查集★1272 小希的迷宫 基 ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- 【HDOJ图论题集】【转】
=============================以下是最小生成树+并查集====================================== [HDU] How Many Table ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【调侃】IOC前世今生
前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...
- Python高手之路【三】python基础之函数
基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...
随机推荐
- Postman接口测试:自动获取登录后的cookie并设置环境变量
在对网站进行接口测试的时候,很多请求往往是需要带登录的cookie才能请求成功的,一般来说,可以用抓包软件(fiddler,浏览器的F12)来查看登录后的cookie,并把它设置到postman的环境 ...
- vue中局部封装axios
Vue中局部配置axios 'use strict' import axios from 'axios'; import { Loading } from 'element-ui'; export c ...
- Windows 和 Office 大客户激活方法
激活Windows 10 找到Powershell,然后右键管理员身份运行,依次输入下面的命令,注意将$host切换成为你组织的服务器地址: slmgr.vbs -upk slmgr.vbs -ipk ...
- DirectX* 11 多线程渲染的性能、方法和实践
对于在 CPU 上运行的 PC 游戏,渲染通常是主要的性能瓶颈:多线程渲染是一种消除瓶颈的有效方法.本文研究了 DirectX* 11 多线程渲染的性能可扩展性,讨论了多线程渲染的两种基本方法,并介绍 ...
- java-循环变量定义问题
第15行,这样就会报错.
- SQLite扫描
SQLite的扫盲 SQLite的是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite的本身是Ç写的,而且体积很小,所以经常被集成到各种应用程序中,主要在手机的应用中使用. 之前没有遇到过关于 ...
- 西安邀请赛-L(打表找规律)
题目链接:https://nanti.jisuanke.com/t/39279 题意:给定n个不同的数表示的序列,定义两种操作:1. 交换前一半和后一半(如果有奇数个,则中间的不管).2. 交换每个偶 ...
- Solve the Equation
Solve a given equation and return the value of x in the form of string "x=#value". The equ ...
- 中国高考志愿填报与职业趋势分析 - ActiveReports 大数据分析报告
中国高考志愿填报与职业趋势分析 1977年中国高考制度恢复,重新开启了人才成长之门.40多年来,高考累积录取人数增长了27倍, 2.28亿人报名,9900万名高素质人才先后通过了中国高等教育的培养,高 ...
- 非旋(fhq)Treap小记
前置知识:二叉搜索树 以下摘自 ↑: 二叉搜索树每次操作访问O(深度)个节点. 在刻意构造的数据中,树的形态会被卡成一条链,于是复杂度爆炸 它的复杂度与直接暴力删除类似. 但二叉搜索树扩展性强.更复杂 ...