想一下传送带 (233)

我记得我和 lh 说了可以对于一个整块把一堆操作放在一起处理

暴力匹配是 O(nq)O(nq)O(nq) 的。

但是如果加一个优先队列呢?

那你就可以在 O(BlogQi)O(BlogQ_i)O(BlogQi​) 的时间内复原这个块 (其中 QiQ_iQi​ 是对这个整块操作的次数)

你再算一下重构的次数和每次操作 insert 的那些点不就完了嘛。

#include<bits/stdc++.h>
#define db double
#define ll long long
#define mkp make_pair
#define pii pair<int,int>
#define inf 0x3f3f3f3f
#define fi first
#define se second
using namespace std;
const int Maxn=4e5+5;
const int Maxm=630;
const int mod=23333333;
inline int read() {int x=0,f=1; char c=getchar();while(c<'0'||c>'9') {c=getchar();}while(c>='0'&&c<='9') {x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x;
}
int n,block,m,L[Maxn],R[Maxn],a[Maxn],bl[Maxn];
priority_queue<int> q[Maxn/Maxm+5];
priority_queue<int,vector<int>,greater<int>> q2[Maxn/Maxm+5];
void merge(int l) {while(q[l].size()) q[l].pop();for(int i=L[l];i<=R[l];i++) {q[l].push(a[i]);}
}
//人去选菜 (选最小的那个)
void split(int l) {for(int i=L[l];i<=R[l];i++) {if(q2[l].size()) {int tmp=q2[l].top();if(tmp<a[i]) {q2[l].pop();q2[l].push(a[i]);a[i]=tmp;}}}while(q2[l].size()) q2[l].pop();merge(l);
}
int solve(int l,int r,int x) {int le=bl[l],ri=bl[r];if(le==ri) {split(le);for(int i=l;i<=r;i++) {if(a[i]>x) {swap(a[i],x);}}merge(le);}else {split(le);split(ri);for(int i=l;i<=R[le];i++) {if(a[i]>x) {swap(a[i],x);}}//来康一康怎么给整块打标记  for(int i=le+1;i<=ri-1;i++) {int tmp=q[i].top();if(tmp>x) {q[i].pop();q[i].push(x);q2[i].push(x);x=tmp;}}for(int i=L[ri];i<=r;i++) {if(a[i]>x) {swap(a[i],x);}}merge(le);merge(ri);}return x;
}
int main() {//  freopen("data.in","r",stdin);n=read(),m=read();block=sqrt(n);for(int i=1;i<=n;i++) {bl[i]=(i-1)/block+1;} for(int i=1;i<=n;i++) a[i]=read();for(int i=1;i<=(n-1)/block+1;i++) {L[i]=(i-1)*block+1;R[i]=min(n,i*block);merge(i);}
//  for(int i=1;i<=(n-1)/block+1;i++) {//      printf("%d\n",q[i].size());
//  }for(int i=1;i<=m;i++) {int l=read(),r=read(),x=read();if(l<=r) {printf("%d\n",solve(l,r,x)); }else {printf("%d\n",solve(1,r,solve(l,n,x)));}
//      for(int j=1;j<=(n-1)/block+1;j++) {//          split(j);
//      }
//      for(int j=1;j<=n;j++) {//          printf("%d ",a[j]);
//      }
//      printf("\n");}
}

【题解】「JOISC 2016 Day 3」回转寿司相关推荐

  1. 「JOISC 2016 Day 3」回转寿司

    https://loj.ac/problem/2736 题解 挺有意思的题. 考虑这种操作不好直接维护,还有时限比较长,所以考虑分块. 考虑一个操作对整个块的影响,无非就是可能把最大的拿走,再把新的元 ...

  2. 「JOISC 2018 Day 3」比太郎的聚会

    「JOISC 2018 Day 3」比太郎的聚会 题意: ​ 给你一个\(DAG\),若干组询问,每次给出一个终点和若干个点,问从给出点以外的点出发,到达终点的最长路.(\(|V|\leq 1e5 | ...

  3. 「JOISC 2017 Day 3」自然公园 题解

    因为感觉网上题解很少,所以想来写一点感性+理性混合的题解qwq 而且犯了很多弱智错误) 考虑我们可以以以下形式确定每一条边: 我们维护一个包含0号节点的连通块 每次挑选一个点 x x x,满足 x x ...

  4. LOJ#2833 「JOISC 2018 Day 1」帐篷 dp

    题目描述 译自 JOISC 2018 Day1 T3「テント / Tents」 JOI 君经营着一座露营地.露营地被划分为 H 行 W 列的矩阵,各行平行于东西方向,而各列平行于南北方向.从北向南数第 ...

  5. 「6月雅礼集训 2017 Day7」回转寿司

    [题目大意] 给一个n个数的序列,q次操作,每次选择区间$[l,r]$,给出数p,对于区间$[l,r]$的每个数$x$,做如下操作: 如果$x > p$,就交换$x$和$p$.求每次操作后$p$ ...

  6. LOJ #2838. 「JOISC 2018 Day 3」比太郎的聚会 根号分治

    这道题的数据范围中有两个需要注意到的点: 1. 边都是由编号小的点连向编号大的点. 2. 总点数只有 $10^5$ 个. 所以我们可以考虑采取根号分治的做法: 对于点数大于 $\sqrt n$ 的部分 ...

  7. [LOJ]#2838. 「JOISC 2018 Day 3」比太郎的聚会 根号分治

    Solution 以后不会做题还是要考虑根号分治啊-- 对于给出点数≥n\ge\sqrt n≥n​,直接O(n)O(n)O(n)DP: 对于给出点数<n<\sqrt n<n​,可以预 ...

  8. 「JOISC 2014 Day1」巴士走读

    「JOISC 2014 Day1」巴士走读 题解部分: (如果不怎么喜欢看推导的人可以直接看下面的关键部分,在段尾会有标注(或者看完定义直接看代码)) 本题让我们求到达点n需要最晚何时到达点1,我们可 ...

  9. 「JOISC 2020 Day4」治疗计划(线段树+dijkstra最短路)

    「JOISC 2020 Day4」治疗计划 description solution 设dpi:1−Ridp_i:1-R_idpi​:1−Ri​ 都能被救治成功的最小花费 两个治疗方案[Li,Ri], ...

最新文章

  1. 用户信息填写web代码_基于web的自定义表单引擎
  2. linux 有线网卡,linux下有线网卡出现ADDRCONF(NETDEV_UP): eth0: link is not ready的解决方法...
  3. mysql 核心目录
  4. python中urllib.quote出现KeyError
  5. pytorchyolov4训练_使用pytorch-yolov5 訓練自己的數據集-2020.6.15
  6. UVALive - 6440
  7. 的ppt_PPT丨清新淡雅年终总结PPT模板
  8. Python 实例教程
  9. 雷达篇(二)线性调频信号公式推导及matlab仿真
  10. 渐渐热起来的网盘搜索工具
  11. 没落的移动端原生开发
  12. 自抗扰控制中的扩张状态观测器收敛性分析3
  13. OSPF路由协议总结(一)
  14. 使用Appinum爬取微信朋友圈
  15. 苹果手机使用技巧篇:教你完美使用好苹果手机的5个方法
  16. java 支付宝帐单_java后台实现支付宝对账功能的示例代码
  17. v5行为验证使用介绍(三)- 程序接入流程
  18. c语言大作业 模拟泊松分布,怎样用C语言模拟泊松分布
  19. UI交互设计好学吗?如何成为优秀设计师
  20. Oracle AWR报告指标全解析

热门文章

  1. fiture“魔镜”售价八千,谁在利用年轻人的身材焦虑?
  2. 机器学习——python scikit-learn 贝叶斯
  3. (2,1,2)卷积码BCJR译码matlab仿真
  4. 全国计算机等级模拟考试软件答案,全国计算机等级考试模拟题答案
  5. Vue-Vant—打包apk
  6. 小米手机连接ubuntu adb调试
  7. 「AHOI / HNOI2017」影魔
  8. 在MFC项目中使用Quick PDF Library Lite读写pdf文件
  9. 成都农科院计算机专业考纲,成都农业科技职业学院2020高职单招考试内容
  10. 男士最佳衣着选择搭配