【题解】「JOISC 2016 Day 3」回转寿司
想一下传送带 (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」回转寿司相关推荐
- 「JOISC 2016 Day 3」回转寿司
https://loj.ac/problem/2736 题解 挺有意思的题. 考虑这种操作不好直接维护,还有时限比较长,所以考虑分块. 考虑一个操作对整个块的影响,无非就是可能把最大的拿走,再把新的元 ...
- 「JOISC 2018 Day 3」比太郎的聚会
「JOISC 2018 Day 3」比太郎的聚会 题意: 给你一个\(DAG\),若干组询问,每次给出一个终点和若干个点,问从给出点以外的点出发,到达终点的最长路.(\(|V|\leq 1e5 | ...
- 「JOISC 2017 Day 3」自然公园 题解
因为感觉网上题解很少,所以想来写一点感性+理性混合的题解qwq 而且犯了很多弱智错误) 考虑我们可以以以下形式确定每一条边: 我们维护一个包含0号节点的连通块 每次挑选一个点 x x x,满足 x x ...
- LOJ#2833 「JOISC 2018 Day 1」帐篷 dp
题目描述 译自 JOISC 2018 Day1 T3「テント / Tents」 JOI 君经营着一座露营地.露营地被划分为 H 行 W 列的矩阵,各行平行于东西方向,而各列平行于南北方向.从北向南数第 ...
- 「6月雅礼集训 2017 Day7」回转寿司
[题目大意] 给一个n个数的序列,q次操作,每次选择区间$[l,r]$,给出数p,对于区间$[l,r]$的每个数$x$,做如下操作: 如果$x > p$,就交换$x$和$p$.求每次操作后$p$ ...
- LOJ #2838. 「JOISC 2018 Day 3」比太郎的聚会 根号分治
这道题的数据范围中有两个需要注意到的点: 1. 边都是由编号小的点连向编号大的点. 2. 总点数只有 $10^5$ 个. 所以我们可以考虑采取根号分治的做法: 对于点数大于 $\sqrt n$ 的部分 ...
- [LOJ]#2838. 「JOISC 2018 Day 3」比太郎的聚会 根号分治
Solution 以后不会做题还是要考虑根号分治啊-- 对于给出点数≥n\ge\sqrt n≥n,直接O(n)O(n)O(n)DP: 对于给出点数<n<\sqrt n<n,可以预 ...
- 「JOISC 2014 Day1」巴士走读
「JOISC 2014 Day1」巴士走读 题解部分: (如果不怎么喜欢看推导的人可以直接看下面的关键部分,在段尾会有标注(或者看完定义直接看代码)) 本题让我们求到达点n需要最晚何时到达点1,我们可 ...
- 「JOISC 2020 Day4」治疗计划(线段树+dijkstra最短路)
「JOISC 2020 Day4」治疗计划 description solution 设dpi:1−Ridp_i:1-R_idpi:1−Ri 都能被救治成功的最小花费 两个治疗方案[Li,Ri], ...
最新文章
- 用户信息填写web代码_基于web的自定义表单引擎
- linux 有线网卡,linux下有线网卡出现ADDRCONF(NETDEV_UP): eth0: link is not ready的解决方法...
- mysql 核心目录
- python中urllib.quote出现KeyError
- pytorchyolov4训练_使用pytorch-yolov5 訓練自己的數據集-2020.6.15
- UVALive - 6440
- 的ppt_PPT丨清新淡雅年终总结PPT模板
- Python 实例教程
- 雷达篇(二)线性调频信号公式推导及matlab仿真
- 渐渐热起来的网盘搜索工具
- 没落的移动端原生开发
- 自抗扰控制中的扩张状态观测器收敛性分析3
- OSPF路由协议总结(一)
- 使用Appinum爬取微信朋友圈
- 苹果手机使用技巧篇:教你完美使用好苹果手机的5个方法
- java 支付宝帐单_java后台实现支付宝对账功能的示例代码
- v5行为验证使用介绍(三)- 程序接入流程
- c语言大作业 模拟泊松分布,怎样用C语言模拟泊松分布
- UI交互设计好学吗?如何成为优秀设计师
- Oracle AWR报告指标全解析
热门文章
- fiture“魔镜”售价八千,谁在利用年轻人的身材焦虑?
- 机器学习——python scikit-learn 贝叶斯
- (2,1,2)卷积码BCJR译码matlab仿真
- 全国计算机等级模拟考试软件答案,全国计算机等级考试模拟题答案
- Vue-Vant—打包apk
- 小米手机连接ubuntu adb调试
- 「AHOI / HNOI2017」影魔
- 在MFC项目中使用Quick PDF Library Lite读写pdf文件
- 成都农科院计算机专业考纲,成都农业科技职业学院2020高职单招考试内容
- 男士最佳衣着选择搭配