众所周知,这是一道莫队题(虽然可以用主席树)。

$1e5 $ 的区间且不易用线段树维护的题可以用莫队,已经有了 $ O(n \sqrt {n}) $ 的复杂度,这时再写各种树维护会达到 $ O(n \sqrt {n} \log {n}) $ 的复杂度,毕竟不是所有人都是wys

事实上多加入/删除一个点,就是单点修改,区间查询的问题,单点分块即可做到 $ O(1) $ 修改, $ O(\sqrt {n}) $ 查询。

最终时间复杂度 $ O(n \sqrt {n}) $ 。

#include<bits/stdc++.h>
using namespace std;
int n,m,a[100010],pos[100010],len,p;
int sz[410],L[410],R[410],bl[100010],sum=0,num[100010];
struct P { int x,y,k,id; };P ask[100010];
int cnt[100010],l=1,r=0,ans[100010];inline int read() {register int tmp=0;register char c=getchar();while(c<'0'||c>'9') c=getchar();while(c>='0'&&c<='9')   tmp=(tmp<<1)+(tmp<<3)+(c^48),c=getchar();return tmp;
}
inline bool cmp(const P &x,const P &y) { return x.x/p!=y.x/p?   x.x/p<y.x/p:x.y<y.y; }
inline void build() {for(int i=1;i<=n;i++)   bl[i]=(i-1)/p+1;for(int i=1;i<=bl[n];i++)   L[i]=(i-1)*p+1,R[i]=i*p;R[bl[n]]=n;
}
inline void modify(int x,int w) { num[x]+=w,sz[bl[x]]+=w,sum+=w; }
inline void add(int x) { if(cnt[x]) modify(cnt[x],-1); ++cnt[x],modify(cnt[x],1); }
inline void del(int x) { modify(cnt[x],-1),--cnt[x]; if(cnt[x]) modify(cnt[x],1); }
inline int query(int x) {if(sum<x)   return -1;int b=1;while(sz[b]<x)  x-=sz[b],++b;for(int i=L[b];i<=R[b];i++) {x-=num[i];if(x<=0)    return i;}
}
int main() {n=read(),m=read(),p=sqrt(n);for(int i=1;i<=n;i++)   pos[i]=a[i]=read();sort(pos+1,pos+n+1),len=unique(pos+1,pos+n+1)-pos-1;for(int i=1;i<=n;i++)   a[i]=lower_bound(pos+1,pos+n+1,a[i])-pos;build();for(int i=1;i<=m;i++)   ask[i].x=read(),ask[i].y=read(),ask[i].k=read(),ask[i].id=i;sort(ask+1,ask+m+1,cmp);for(int i=1;i<=m;i++) {while(r<ask[i].y)   add(a[++r]); while(r>ask[i].y)  del(a[r--]);while(l>ask[i].x)   add(a[--l]); while(l<ask[i].x)  del(a[l++]);ans[ask[i].id]=query(ask[i].k);}for(int i=1;i<=m;i++)   printf("%d\n",ans[i]);return 0;
}

转载于:https://www.cnblogs.com/daniel14311531/p/10265883.html

曼哈顿交易 - 题解相关推荐

  1. 【题解】曼哈顿模拟赛(洛谷)

    前言 首先%%%所有 AK/差点AK/场外AK 的神犇! 这次出题比较仓促,题目质量或许不够高.庆幸的是数据.标程没有出问题. 办比赛的目的就是共同学习.进步,大家开心就好~ std.测试数据均已打包 ...

  2. 1到10加法创新图片-走迷宫_纽约楼市寒冬,曼哈顿房价创新低,为何上季度交易却反弹?...

    点击关注我们 独享买家指南 随着2020的到来新的十年已经拉开序幕那么回首2019年纽约房地产市场表现如何?现在就让我们一起来看一下由纽约领先房地产公司豪仕德Halstead新鲜出炉的2019第四季度 ...

  3. 「题解」老鼠与猫的交易

    题目描述 有一只老鼠很喜欢奶酪,但是奶酪被分别放在N个房间里,而且这些房间都有一只猫咪看守,现在它准和猫咪们 做个交易.它有M磅的猫食,想用这M磅猫食换取奶酪.在猫咪看守的每一个房间里有奶酪J[i]磅 ...

  4. 算法(第四版)C# 习题题解——1.3

    写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 这一节内容可能会用到的库文件有 ...

  5. 2018 ACM-ICPC Asia Shenyang Regional Contest 题解(9 / 13)【每日亿题2021/2/24】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A.(2018 ACM-ICPC Shenyang J)How Much Memory Your ...

  6. BZOJ 1604 [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居:队列 + multiset + 并查集【曼哈顿距离变形】...

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1604 题意: 平面直角坐标系中,有n个点(n <= 100000,坐标范围10^9) ...

  7. 算法(第四版)C# 习题题解——1.2

    写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 这一节内容可能会用到的库文件有 ...

  8. 2019 CCF CSP-J2题解

    A题: 数字游戏(number) 输入文件名:number.in 输出文件名:number.out 共 20 个测试点,每个测试点 5 分 每个测试点限时 1 秒,运行内存上限 256MB 问题描述 ...

  9. 2017杭电ACM集训队单人排位赛 - 1(ALL题解)

    A. 看日出 看日出 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...

最新文章

  1. ALV列(Column)换到行(Row) 之 列上限不固定篇
  2. 01_GIT基础、安装
  3. Keil | 使用Register Windows测量函数的执行时间
  4. 9203 演练 jsp实现增删改查
  5. libguestfs java_libguestfs实现原理summary
  6. android webview 设置cookie时间,解决Android webview设置cookie和cookie丢失的问题
  7. android浮动按钮_Android扩展浮动操作按钮
  8. (转)Spring整合Jpa
  9. Visual Graph图形控件的高级应用
  10. K - 迷宫问题 POJ - 3984(广度搜索)
  11. HuaWei ❀ Radius协议概述
  12. PyTorch读取目标检测数据集
  13. 【网络原理】详解访问域名 www.baidu.com 中的DNS解析过程
  14. C语言常用语句之-循环语句
  15. 手势检测及手掌质心的运动轨迹(opencv)
  16. Nginx基础应用——日志切割
  17. 数据库身份证号加密密码加密_使用基于密码的加密保护会议室数据库
  18. 一看就懂的vue简版源码概述
  19. [转] 人工智能之机器学习路线图
  20. 记一款IT资产管理平台(Chemex)搭建

热门文章

  1. c++如何解决大数组栈内存不够的问题
  2. vue-cli 该如何正确打包iconfont?
  3. JavaEE基础(三)
  4. C++常量的引用 const
  5. 【Vue2.0】—组件(十一)
  6. 移动开发—详解flex布局之携程网首页案例制作
  7. JavaScript学习(四十八)—原型对象的增删改查
  8. 浅谈CSS3中的弹性布局
  9. mybatis批量删除和插入
  10. 你见过哪些饭桌上不礼貌的行为?