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. 一个简单的Spring的AOP例子

    目标对象的接口:IStudent.java  1  /**  2  *  3   */  4  package  com.dragon.study; 5   6  /**  7  *  @author ...

  2. Alpha发布——Thunder团队

    视频展示 视频链接: 爱奇艺: http://www.iqiyi.com/w_19ruzwru25.html      (画质清晰,但可能需多次刷新或重新打开页面,此问题因电脑型号和网络而异) 优酷: ...

  3. 11.24Daily Scrum(3)

    人员 任务分配完成情况 明天任务分配 王皓南 实现网页上视频浏览的功能.研究相关的代码和功能.1002 数据库测试 申开亮 实现网页上视频浏览的功能.研究相关的代码和功能.1003 实现视频浏览的功能 ...

  4. 在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 ...

  5. 3dContactPointAnnotationTool开发日志(二)

      今天看的时候发现其实www的方式是可以根据指定路径读取本地图片到Image中的.也就是昨天提到的第二种方式.   随便选了个图片做示范: 修改后的代码如下: using System.Collec ...

  6. 在c++中调用exe程序进行操作

    #include <Windows.h> #include <iostream> #include <direct.h> #define picNum 228 us ...

  7. Chrome Extensions API & options

    Chrome Extensions API options https://developer.chrome.com/extensions https://developer.chrome.com/e ...

  8. [BinaryTree] 最大堆的类实现

    堆的定义: 最大树(最小树):每个结点的值都大于(小于)或等于其子结点(如果有的话)值的树.最大堆(最小堆):最大(最小)的完全二叉树. 最大堆的抽象数据结构: class MaxHeap { pri ...

  9. openstack之horizon部署

    登录官网 www.openstack.org 查看安装文档 https://docs.openstack.org/newton/install-guide-rdo/horizon.html 第一步yu ...

  10. CF#67 75d Big Maximum Sum

    ~~~题面~~~ 题解: 观察到拼接后的数据范围过大,无法O(n)解决,但是大区间是由很多小区间组成,而小区间是固定的,不会变化,所以可以考虑预处理出每个小区间的信息,然后根据给定序列按顺序一步一步合 ...