jzoj6308-中间值【分治】
正题
题目大意
两个序列不降a,ba,ba,b,每次可以修改或询问[l1,r1,l2,r2][l_1,r_1,l_2,r_2][l1,r1,l2,r2]要求输出将序列aaa的l1∼r1l_1\sim r_1l1∼r1和bbb的l2∼r2l_2\sim r_2l2∼r2部分合起来然后求中位数。
解题思路
我们考虑分治,我们取出两个区间l1+k2−1∼r1l_1+\frac{k}{2}-1\sim r_1l1+2k−1∼r1和l2+k2−1∼r2l_2+\frac{k}{2}-1\sim r2l2+2k−1∼r2,然后我们可以判断
若amid1<bmid2a_{mid_1}<b_{mid_2}amid1<bmid2,我们就有mid1+1∼r1mid_1+1\sim r_1mid1+1∼r1和mid2∼r2mid_2\sim r_2mid2∼r2都比l1∼mid1l_1 \sim mid_1l1∼mid1大,然后因为这些区间的大小大于等于kkk,所以l1∼mid1l_1\sim mid_1l1∼mid1是不包含答案的,所以我们把这个区间去掉。
然后就是这样不停减少就过了
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=510000;
int n,m,a[N],b[N];
int calc(int *a,int w,int l,int r)
{return (lower_bound(a+l,a+1+r,w)-a)-l;}
int solve(int l1,int r1,int l2,int r2,int k)
{if(r2<l2) return a[l1+k-1];if(r1<l1) return b[l2+k-1];if(k==1) return min(a[l1],b[l2]);int m1=min(l1+k/2-1,r1),m2=min(l2+k/2-1,r2);if(a[m1]<=b[m2]) return solve(m1+1,r1,l2,r2,k-(m1-l1+1));else return solve(l1,r1,m2+1,r2,k-(m2-l2+1));
}
int main()
{freopen("median.in","r",stdin);freopen("median.out","w",stdout);scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=1;i<=n;i++)scanf("%d",&b[i]);while(m--){int opt,x,y,l,r;scanf("%d%d%d%d",&opt,&x,&y,&l);if(opt==1){if(!x) a[y]=l;else b[y]=l; }else {scanf("%d",&r);printf("%d\n",solve(x,y,l,r,((r-l+1)+(y-x+1))/2+1));}}
}
jzoj6308-中间值【分治】相关推荐
- Luogu4755 Beautiful Pair 最值分治、主席树
传送门 整天做一些模板题感觉药丸 设\(val_i\)表示第\(i\)个位置的值 看到区间最大值考虑最值分治.对于当前的区间\([l,r]\),找到区间最大值\(mid\),递归\([l,mid-1] ...
- 欢乐纪中A组赛【2019.8.18】
前言 有一个暴力写挂了QVQQVQQVQ 成绩 RankRankRank PersonPersonPerson ScoreScoreScore AAA BBB CCC 111111 (J−3)LRZ( ...
- 【IOI2018】会议【笛卡尔树】【dp】【线段树】
题意:长度为nnn的序列,qqq次询问,每次给定一个区间,钦定区间中的一个位置xxx,使得区间所有点 与xxx之间的最大值(含端点) 之和 最小,输出最小值. n,q≤7.5×105n,q\leq7. ...
- yxy小蒟蒻的201112总结
2020.11.12 周四 今天题挺简单的 A B C 都是送分题 我 C 题考试的时候瞄了一眼 就战略性放弃了 这里解释一下 真真真不是故意不打的 那是因为之前 bobbobbob 给我说过这个题 ...
- 【CodeForces】Codeforces Global Round 9
比赛链接 点击打开链接 官方题解 点击打开链接 Problem A. Sign Flipping 将奇数位的数取非正值,偶数位的数取非负值即可. 单组数据时间复杂度 O ( N ) O(N) O(N) ...
- PKUWC2020 (旅)游记
体验营员没人权系列 草 话说这不还是2019年么... 先占坑 本来以为冬令营没戏 回去上了一个月文化课 最后一周才知道进了 W C WC WC 匆匆停了一周课就滚来旅游了 听说是 l i n u x ...
- 牛客练习赛84:牛客推荐系统开发之标签重复度(点分治+动态开点权值线段树)
题意: 给你一棵树,问树上所有两点路径上的(最大值最小值乘积)之和. 题解: 很明显的一个点分治问题,然后就是个二维偏序问题了(虽然我也不知道啥是二维偏序). 点分治不难,重点是点分治内cal函数如何 ...
- 【BZOJ3295】动态逆序对,CDQ分治/BIT套权值线段树
传送门 思路: 用来练习cdq的题目 断断续续纠结了2天 因为loli一直在考试 最后莫名乱搞了一发就A了? 实际上是考虑每一次修改对答案的贡献,即位置在1~x-1且大于x的数以及位置在x+1~n且小 ...
- 递归分治问题之找出两个有序序列的中间值
问题描述: You are interested in analyzing some hard-to-obtain data from two separate databases. Each dat ...
- 递归求最值(分治递归)
输入n,再输入n个数,输出n个数中的最小值和最大值. 分治与递归! 代码: #include<iostream>using namespace std; void minmax(int * ...
最新文章
- 你了解VLSM多少(1)
- 数据仓库、数据集市、数据湖,这些大数据名词你知道多少?
- PHP MySQL基础知识
- Run-time error “70“:Permission denied
- 挑战iOS!小米全新OS发布:22款机型首发
- 第10章 随机山水画(《Python趣味创意编程》教学视频)
- mysql 主命令总结
- HibernateTemplate.save()与HibernateTemplate.update() 无法写入数据库的问题
- SQL Server 中死锁产生的原因及解决办法
- 智能供应链预测的应用
- 隋政军---将木屋烧烤打造成中国领先的烧烤品牌
- Excel导入导出之easypoi用法
- CSS: 对background: url(“~assets/img/common/collect.svg“) 0 0/14px 14px 的理解
- Zynga公布2020年第二季度财务业绩
- 黑客帝国角色 之 先知的另类解读
- 美的空气净化器H32评测:美观、实用以及更多
- 互联网、因特网、万维网的区别
- sha1加密实现(java)
- 2020年外贸软件排名和市场占有率
- 手机app开发制作流程是怎样的?
热门文章
- c语言得到txt文件的长度,我利用C语言实现SHA-256算法,需要从一个txt文件中读出数据并把...
- linux系统故障实验,Linux常见系统故障排除
- java流的序列化_Java中的对象流和序列化介绍
- http referer 验证防御方法_渗透测试 跨站攻击防御与安全检测手法剖析
- 东北大学计算机 大一物理考试题,东北大学大学物理期末考题及答案Word版
- 读取oracle bfile字段,ORACLE中BFILE字段的使用研究_oracle
- java当中递归打印目录树
- qt 实现html 编辑器,基于QT的HTML编辑器的设计与实现.doc
- [Spring5]Spring框架概述
- 洛谷 P1958 上学路线-dfs