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。

输入输出样例

输入样例#1:

4 4
2 3 3 3
1 4 1
1 4 2
1 3 2
1 3 3
输出样例#1:

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 曼哈顿交易的更多相关文章

  1. AC日记——曼哈顿交易 洛谷 P3730

    曼哈顿交易 思路: 都是套路: 代码: #include <cmath> #include <cstdio> #include <cstring> #include ...

  2. BZOJ1855或洛谷2569 [SCOI2010]股票交易

    一道单调队列优化\(DP\) BZOJ原题链接 洛谷原题链接 朴素的\(DP\)方程并不难想. 定义\(f[i][j]\)表示到第\(i\)天,手上持有\(j\)股时的最大收益. 转移方程可以分成四个 ...

  3. 【洛谷P1379】八数码难题(广搜、A*)

    八数码难题 题目描述 一.广搜: 首先要考虑用什么存每一个状态 显然每个状态都用一个矩阵存是很麻烦的. 我们可以考虑将一个3*3的矩阵用一个字符串或long long 存. 每次扩展时再转化为矩阵. ...

  4. 洛谷 P3636 曲面

    题目背景 xht喜欢研究数学函数,他特别喜欢反比例函数. 题目描述 我们知道,反比例函数xy=a的图象是双曲线. xht于是想:把它推广到三维是什么样的呢? 定义曲面C(k)为方程xyz=k所确定的曲 ...

  5. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  6. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  7. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  8. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  9. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

随机推荐

  1. qt qchart缩放后坐标轴间隔取整

    使用qt的qchart显示数据曲线,坐标轴QValueAxis可以设置刻度间隔数量,但每个刻度的数值是根据坐标的极值除以间隔数量得到的,不一定是整数,导致曲线控件的显示刻度不适合观察. 如图: 纵坐标 ...

  2. DWORD WORD到INT的转换

    最近在做一个有关TCP/TP通信的消息解析,涉及到了这方面的转换,记录一下. 首先,如果是在网络传输.消息解析的情况下,要注意一下网络传送使用的是大端还是小端模式,这影响到我们的高低位的传输顺序. W ...

  3. c# 读取xml文件 编写form

    主要思想:xml保存控件的数据,c#读取出来并加以显示. 难点:1.控件有父容器和子控件的关系:2.控件事件的添加. 1.控件有父容器和子控件的关系: 可以用绝对坐标在xml文件中先读取子控件再读取父 ...

  4. lintcode-13-字符串查找

    字符串查找 对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始).如果不存在,则返回 -1. 说明 ...

  5. phpcms退出 提示 :退出成功0 。 的解决办法

    打开/phpcms/modules/member/index.php 搜索如下代码: showmessage(L('logout_success').$synlogoutstr, $forward); ...

  6. ViewData与ViewBag

    ViewData与ViewBag使用的是同一个数据源,因此数据一样,只是ViewBag 不再是字典的键值对结构,而是 dynamic 动态类型(http://www.cnblogs.com/kissd ...

  7. deep learning2

    九.Deep learning的常用模型或者方法 9.1.AutoEncoder自动编码器 Deep Learning最简单的一种方法是利用人工神经网络的特点,人工神经网络(ANN)本身就是具有层次结 ...

  8. RT-thread内核之邮箱

    一.邮箱控制块:在include/rtdef.h中 #ifdef RT_USING_MAILBOX /** * mailbox structure */ struct rt_mailbox { str ...

  9. ARC072 D Alice&Brown 博弈论

    ---题面--- 题解: 题目大意:有2堆石子数分别为x, y的石子,你每次可以从中间的某一堆中取出2i个石子,扔掉i个,并把剩下的i个放到另一堆,无法操作的人就输了. 现在给定x,y,判断先手必赢还 ...

  10. BZOJ3864 & HDU4899:Hero meet devil——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3864 http://acm.hdu.edu.cn/showproblem.php?pid=4899 ...