洛谷 P3730 曼哈顿交易
https://www.luogu.org/problem/show?pid=3730
题目背景
will在曼哈顿开了一家交易所,每天,前来买卖股票的人络绎不绝。
现在,will想要了解持股的情况。由于来交♂易的人实在是太多了,需要你写一个程序来帮他完成这个任务。
题目描述
前来交易的N个人排成了一行,为了简便起见,每个人都只持有一种股票。
不同的的人可能会持有相同的股票。
定义一种股票的热度为持有该股票的人数。
- 每次,will会给出这样的询问:在一段连续区间的人之中,热度第k小的股票的热度是多少?
输入输出格式
输入格式:
第一行两个正整数N,M,分别表示人数和询问的次数;
接下来一行N个正整数,表示每个人所持的股票 。
- 接下来M行,每行三个正整数l,r,k,表示询问区间中的第k小的热度,保证。
输出格式:
对于每个询问,输出一行一个数,表示区间[l, r]中的第k小的热度值。
- 如果k大于区间里股票的种类数,输出-1。
输入输出样例
4 4
2 3 3 3
1 4 1
1 4 2
1 3 2
1 3 3
1
3
2
-1
说明
对于20%的数据,;
对于另外10%的数据,所有的;
对于100%的数据,;
莫队
离散化
维护每种股票的出现次数sum
维护出现次数(热度)为i的有几种股票,即出现次数的出现次数cnt
同时,对cnt分块查询
#include<cmath>
#include<cstdio>
#include<algorithm>
#define N 100001
using namespace std;
int n,m,siz;
int key[N],hashh[N];
int bl[N],ans[N];
int sum[N],cnt[N],block[N],num;
struct node
{
int l,r,id,k;
bool operator < (node p)const
{
if(bl[l]!=bl[p.l]) return bl[l]<bl[p.l];
if(r!=p.r) return r<p.r;
return k<p.k;
}
}e[N];
void read(int &x)
{
x=; char c=getchar();
while(c<''||c>'') c=getchar();
while(c>=''&&c<='') { x=x*+c-''; c=getchar(); }
}
inline void update(int pos,int w)
{ block[bl[sum[hashh[pos]]]]--; cnt[sum[hashh[pos]]]--;
if(w) sum[hashh[pos]]++;
else sum[hashh[pos]]--;
block[bl[sum[hashh[pos]]]]++; cnt[sum[hashh[pos]]]++;
}
inline int query(int w)
{
int i;
for(i=;i<=siz;i++)
if(w-block[i]>) w-=block[i];
else break;
for(int j=(i-)*siz+;j<=i*siz;j++)
{
w-=cnt[j];
if(w<=) return j;
}
return -;
}
int main()
{
read(n); read(m);
siz=sqrt(n);
for(int i=;i<=n;i++) bl[i]=(i-)/siz+;
for(int i=;i<=n;i++) read(key[i]),hashh[i]=key[i];
sort(key+,key+n+);
key[]=unique(key+,key+n+)-(key+);
for(int i=;i<=n;i++) hashh[i]=lower_bound(key+,key+key[]+,hashh[i])-key;
int l,r,w;
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&e[i].l,&e[i].r,&e[i].k); e[i].id=i;
}
sort(e+,e+m+);
int L=,R=;
for(int i=;i<=m;i++)
{
while(L<e[i].l) update(L++,false);
while(L>e[i].l) update(--L,true);
while(R>e[i].r) update(R--,false);
while(R<e[i].r) update(++R,true);
ans[e[i].id]=query(e[i].k);
}
for(int i=;i<=m;i++) printf("%d\n",ans[i]);
}
洛谷 P3730 曼哈顿交易的更多相关文章
- AC日记——曼哈顿交易 洛谷 P3730
曼哈顿交易 思路: 都是套路: 代码: #include <cmath> #include <cstdio> #include <cstring> #include ...
- BZOJ1855或洛谷2569 [SCOI2010]股票交易
一道单调队列优化\(DP\) BZOJ原题链接 洛谷原题链接 朴素的\(DP\)方程并不难想. 定义\(f[i][j]\)表示到第\(i\)天,手上持有\(j\)股时的最大收益. 转移方程可以分成四个 ...
- 【洛谷P1379】八数码难题(广搜、A*)
八数码难题 题目描述 一.广搜: 首先要考虑用什么存每一个状态 显然每个状态都用一个矩阵存是很麻烦的. 我们可以考虑将一个3*3的矩阵用一个字符串或long long 存. 每次扩展时再转化为矩阵. ...
- 洛谷 P3636 曲面
题目背景 xht喜欢研究数学函数,他特别喜欢反比例函数. 题目描述 我们知道,反比例函数xy=a的图象是双曲线. xht于是想:把它推广到三维是什么样的呢? 定义曲面C(k)为方程xyz=k所确定的曲 ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
- 洛谷P1710 地铁涨价
P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交 讨论 题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...
随机推荐
- 一个简单的Spring的AOP例子
目标对象的接口:IStudent.java 1 /** 2 * 3 */ 4 package com.dragon.study; 5 6 /** 7 * @author ...
- Alpha发布——Thunder团队
视频展示 视频链接: 爱奇艺: http://www.iqiyi.com/w_19ruzwru25.html (画质清晰,但可能需多次刷新或重新打开页面,此问题因电脑型号和网络而异) 优酷: ...
- 11.24Daily Scrum(3)
人员 任务分配完成情况 明天任务分配 王皓南 实现网页上视频浏览的功能.研究相关的代码和功能.1002 数据库测试 申开亮 实现网页上视频浏览的功能.研究相关的代码和功能.1003 实现视频浏览的功能 ...
- 在64位的环境下利用Jet来操作Access,Excel和TXT
For example, you have a 32-bit application that uses the Microsoft OLE DB Provider for Jet. If you m ...
- 3dContactPointAnnotationTool开发日志(二)
今天看的时候发现其实www的方式是可以根据指定路径读取本地图片到Image中的.也就是昨天提到的第二种方式. 随便选了个图片做示范: 修改后的代码如下: using System.Collec ...
- 在c++中调用exe程序进行操作
#include <Windows.h> #include <iostream> #include <direct.h> #define picNum 228 us ...
- Chrome Extensions API & options
Chrome Extensions API options https://developer.chrome.com/extensions https://developer.chrome.com/e ...
- [BinaryTree] 最大堆的类实现
堆的定义: 最大树(最小树):每个结点的值都大于(小于)或等于其子结点(如果有的话)值的树.最大堆(最小堆):最大(最小)的完全二叉树. 最大堆的抽象数据结构: class MaxHeap { pri ...
- openstack之horizon部署
登录官网 www.openstack.org 查看安装文档 https://docs.openstack.org/newton/install-guide-rdo/horizon.html 第一步yu ...
- CF#67 75d Big Maximum Sum
~~~题面~~~ 题解: 观察到拼接后的数据范围过大,无法O(n)解决,但是大区间是由很多小区间组成,而小区间是固定的,不会变化,所以可以考虑预处理出每个小区间的信息,然后根据给定序列按顺序一步一步合 ...