题目大意:


解题思路:

首先我们看他们的定义:
bib_ibi​是a1,a2,a3,....,ai,ai+1,.......a2i−1a_1,a_2,a_3,....,a_i,a_{i+1},.......a_{2i-1}a1​,a2​,a3​,....,ai​,ai+1​,.......a2i−1​
bi+1b_{i+1}bi+1​是a1,a2,a3,....,ai,ai+1,.......a2i+1a_1,a_2,a_3,....,a_i,a_{i+1},.......a_{2i+1}a1​,a2​,a3​,....,ai​,ai+1​,.......a2i+1​
我们发现bi+1b_{i+1}bi+1​比bib_ibi​只多了a2i,a2i+1a_{2i},a_{2i+1}a2i​,a2i+1​
那么就每次加入两个数!

那么我们看一下每一次中位数会怎么变换?
假设c1,c2,c3.....ci,ci+1,......c2i−1c_1,c_2,c_3.....c_i,c_{i+1},......c_{2i-1}c1​,c2​,c3​.....ci​,ci+1​,......c2i−1​是a1,a2,a3,....,ai,ai+1,.......a2i−1a_1,a_2,a_3,....,a_i,a_{i+1},.......a_{2i-1}a1​,a2​,a3​,....,ai​,ai+1​,.......a2i−1​排好序的结果
那么bi=ci中位数b_i=c_i中位数bi​=ci​中位数

对于a2i,a2i+1a_{2i},a_{2i+1}a2i​,a2i+1​有三种情况

  1. 它们分别是在cic_ici​两端那么中位数不变
  2. 它们有两个都在左边,那么中位数会往右边移动一位!
  3. 它们有两个都在右边,那么中位数会往左边移动一位!

那么对于相邻的两个中位数bi和bi+1b_i和b_{i+1}bi​和bi+1​是没有数在它们之间,因为每次只移动一位!
这个可以用树状数组去维护,不过要先离散化


#include <bits/stdc++.h>
#define mid ((l + r) >> 1)
#define Lson rt << 1, l , mid
#define Rson rt << 1|1, mid + 1, r
#define ms(a,al) memset(a,al,sizeof(a))
#define log2(a) log(a)/log(2)
#define lowbit(x) ((-x) & x)
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define INF 0x3f3f3f3f
#define LLF 0x3f3f3f3f3f3f3f3f
#define f first
#define s second
#define endl '\n'
using namespace std;
const int N = 2e6 + 10, mod = 1e9 + 9;
const int maxn = 500010;
const long double eps = 1e-5;
const int EPS = 500 * 500;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
typedef pair<double,double> PDD;
template<typename T> void read(T &x)
{x = 0;char ch = getchar();ll f = 1;while(!isdigit(ch)){if(ch == '-')f*=-1;ch=getchar();}while(isdigit(ch)){x = x*10+ch-48;ch=getchar();}x*=f;
}
template<typename T, typename... Args> void read(T &first, Args& ... args)
{read(first);read(args...);
}
int tr[maxn];
int arr[maxn];
vector<int> lis;
map<int,int> mp;inline void add(int pos, int val) {while(pos < maxn) {tr[pos] += val;pos += lowbit(pos);}
}inline int sum(int x) {int res = 0;while(x) {res += tr[x];x -=lowbit(x);}return res;
}int main() {IOS;int T;cin >> T;while(T --) {int n;cin >> n;for(int i = 1; i <= n; ++ i) {cin >> arr[i];lis.push_back(arr[i]);}sort(lis.begin(),lis.end());lis.erase(unique(lis.begin(),lis.end()),lis.end());for(int i = 1; i <= n; ++ i) arr[i] = lower_bound(lis.begin(),lis.end(),arr[i]) - lis.begin() + 1;bool flag = 1;for(int i = 1; i <= n; ++ i) {if(!mp.count(arr[i])) {mp[arr[i]] = true;add(arr[i],1);}if(i == 1) continue;int x = sum(arr[i]);int y = sum(arr[i-1]);if(max(x,y) - min(x,y) > 1) {flag = 0;break;}}if(flag) cout << "YES\n";else cout << "NO\n";for(auto it : mp) add(it.first,-1);mp.clear();lis.clear();}
}

树状数组 ---- 树状数组+动态维护前缀中位数 D. Omkar and Medians相关推荐

  1. 树套树 ---- 树状数组套权值线段树模板题 P2617 Dynamic Rankings 动态第K大

    题目链接 题目大意: 给你一个数组aaa,aaa有两个操作 询问aaa中[l,r][l,r][l,r]区间里面第kkk小的数是哪个? 修改axa_xax​为yyy 解题思路: 首先我们知道权值线段树是 ...

  2. 树形json扁平化,一维数组树状化,对象深拷贝,元素后插入新元素,格式或动态路由等常用js合集

    索引 一.在元素后面插入一个新的元素. 二.对象或者数组的深拷贝. 三.从服务器端获取到动态路由表的格式化. 四.json树形数据扁平化处理(变成一维数组) 五.一维数组转化为树状结构对象. 六.防抖 ...

  3. 树型结构——树状数组

    目录 1.树状数组的引入 2.基本操作:主要包括 插入操作,查询操作. 3.具体实现: 例题:1.楼兰图腾 241. 楼兰图腾 2.一个简单的整数问题 3.一个简单的整数问题2 1.树状数组的引入 树 ...

  4. 吊打线段树的超级树状数组

    你是否讨厌线段树那冗长的代码?你是否还在因为线段树的难调试而满头♂dark汗?那么,请不要错过!超级树状数组特价!只要998,只要998! ##¥--#--¥%--&%¥--ER#%$#$#^ ...

  5. Codeforces Round #439 (Div. 2) E. The Untended Antiquity 二维线段树||二维树状数组

    http://codeforces.com/contest/869/problem/E 题意:n*m的矩阵,q次操作,三种类型 类型1:给指定矩阵加上围栏 类型2:给指定矩阵去掉围栏 类型3:查询两点 ...

  6. Acwing 4339 敌兵布阵 暴力 + 分块 + 线段树 + Zkw线段树 + 树状数组

    来一篇超全题解 数据结构大杂烩 原题连接 题目描述 敌人有 NNN 个工兵营地,编号 1∼N1∼N1∼N. 初始时,第 iii 个营地有 aia_iai​ 个人. 接下来有若干个命令,命令有 444 ...

  7. (js)扁平数组树状化 树状数组扁平化

     扁平数组树状化(利用递归,两个函数完成树状转化 ) 数组格式: let list = [{ id: 1, title: '标题1', p_id: 0 },{ id: 2, title: '标题2', ...

  8. 数组树/fenwicktree/Binary Indexed Tree

    在解类似 leetcode 307题区域和检索 - 数组可修改的题时,我们可以使用一种比较小众的数据结构,数组树. 数组树的结构依托于数组,它的结构看起来类似下面这种: 1,2,3....代表他们在数 ...

  9. 庖丁解牛获取连接状态数的awk数组命令

    全部系列分为五篇文章,本博文为第二篇: 三.庖丁解牛获取连接状态数的命令 3.1 获取连接状态数的awk命令 netstat -n |awk '/^tcp/ {++S[$NF]} END {for(a ...

最新文章

  1. 数据库查询构建控件集Active Query Builder 控件
  2. VMWare ubuntu虚拟机每次开机要等待1分30秒解决方案(A start job is running for dev-disk-by\x2duui...)(修改真实swap UUID)
  3. oracle锁表怎么解决,Oracle锁表问题的简捷处理技巧
  4. 设计java application程序_下面哪些步骤是Java Application程序的建立及运行的步骤( )...
  5. 使用Bazel编译报错ERROR: Unrecognized option: --experimental_repo_remote_exec解决方法
  6. 【李宏毅2020 ML/DL】P8-9 Optimization for Deep Learnin | 优化器技术总结,SGDM 与 Adam 对比与使用建议
  7. Node JS和MongoDB的集成简单示例
  8. javascript中数组循环的方式
  9. 【车流量计数】基于matlab光流场交通汽车检测跟踪【含Matlab源码 504期】
  10. PCIE协议免费分享
  11. java lockmodetype_java – 如何使用Spring Data JPA查找实体时如何启用LockModeType.PESSIMISTIC_WRITE?...
  12. 请回答2021,爱彼迎、木鸟民宿、途家民宿年度走心PK
  13. 三角形外接圆与内切圆
  14. 十余款新品惊艳亮相,华为春季旗舰新品发布会看点满满
  15. 简化字与繁体字的关系
  16. 正规的伦敦金投资平台排行榜
  17. 基于核函数加权直方图的Mean Shift目标跟踪 (二维颜色直方图)
  18. Invocation Target Exception调用目标异常可能是参数漏传
  19. 软件测试 如何测试qq,一个新项目如何进行测试?——QQ对话录
  20. typescript 中 public private protect 区别

热门文章

  1. 论文里常出现的可扩展性(Scalability)是什么意思呢?
  2. 将来以静态网页形式展示漏洞影响产品信息
  3. 哪个瞬间让你突然觉得CV技术真有用?
  4. 机器视觉系统原理及学习策略
  5. 反思深度学习与传统计算机视觉的关系
  6. 使用Python+OpenCV+GAN实现车牌图像增强
  7. mysql索引为啥要选择B+树 (上)
  8. 调整Windows操作系统下时间同步的频率
  9. 【初窥javascript奥秘之事件机制】论“点透”与“鬼点击”
  10. Elasticsearch的javaAPI之query dsl-queries