说实话,$2200$ 的题做不出来也有点丢脸了……

当然要先判所有数出现次数相同。

首先区间排序就相当于交换相邻两个数,前面的数要大于后面的数才能交换。

然后就不会了……

我们考虑 $b_1$ 到 $b_{i-1}$ 都已经归位了,现在要把 $b_i$ 归位。

找到其在 $a$ 中下一次出现的位置(设为 $p$)。发现只有当 $a_p$ 是 $a_i$ 到 $a_p$ 的最小值时,才能归到。

具体代码实现时不会改变 $a$ 的位置,那怎么判断最小值呢?发现已经归位的数对最小值没有贡献,可以归位后就变成 INF。然后询问 $1$ 到 $p$ 的最小值即可。

时间复杂度 $O(n\log n)$。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=;
#define lson o<<1,l,mid
#define rson o<<1|1,mid+1,r
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define ROF(i,a,b) for(int i=(a);i>=(b);i--)
#define MEM(x,v) memset(x,v,sizeof(x))
inline int read(){
int x=,f=;char ch=getchar();
while(ch<'' || ch>'') f|=ch=='-',ch=getchar();
while(ch>='' && ch<='') x=x*+ch-'',ch=getchar();
return f?-x:x;
}
int t,n,a[maxn],b[maxn],ta[maxn],tb[maxn],mn[maxn*],len[maxn];
vector<int> at[maxn];
inline void pushup(int o){
mn[o]=min(mn[o<<],mn[o<<|]);
}
void build(int o,int l,int r){
if(l==r) return void(mn[o]=a[l]);
int mid=(l+r)>>;
build(lson);build(rson);
pushup(o);
}
void update(int o,int l,int r,int p,int v){
if(l==r) return void(mn[o]=v);
int mid=(l+r)>>;
if(mid>=p) update(lson,p,v);
else update(rson,p,v);
pushup(o);
}
int query(int o,int l,int r,int ql,int qr){
if(l>=ql && r<=qr) return mn[o];
int mid=(l+r)>>,ans=2e9;
if(mid>=ql) ans=min(ans,query(lson,ql,qr));
if(mid<qr) ans=min(ans,query(rson,ql,qr));
return ans;
}
int main(){
t=read();
while(t--){
bool flag=true;
n=read();
FOR(i,,n) ta[i]=a[i]=read(),at[a[i]].push_back(i);
FOR(i,,n) tb[i]=b[i]=read();
sort(ta+,ta+n+);sort(tb+,tb+n+);
FOR(i,,n) if(ta[i]!=tb[i]){puts("NO");flag=false;break;}
if(!flag){
FOR(i,,n) at[i].clear(),len[i]=;
continue;
}
build(,,n);
FOR(i,,n){
int p=at[b[i]][len[b[i]]++];
if(query(,,n,,p)!=b[i]){puts("NO");flag=false;break;}
update(,,n,p,2e9);
}
if(flag) puts("YES");
FOR(i,,n) at[i].clear(),len[i]=;
}
}

最新文章

  1. BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】
  2. GMOLO平板——如何安装新系统
  3. 跳出IFrame几种方式
  4. stage simulator
  5. LA 3983 Robotruck
  6. 在VS2012中使用GDI+
  7. java-----基本数据类型包装类
  8. C++结构简介
  9. [ES6] Objects create-shorthand &amp;&amp; Destructuring
  10. 企业部署Windows 8 Store 风格应用
  11. 用ifconfig命令,只有lo,没有eth0的解决方案
  12. 分享一个PHP文件上传类
  13. bzoj2127
  14. Bootstrap-datepicker3官方文档中文翻译---Event/事件(原文链接 http://bootstrap-datepicker.readthedocs.io/en/latest/index.html)
  15. 【原】Java学习笔记003 - 数据类型
  16. weblogic的基础安装
  17. “妄”眼欲穿之CSS 居中问题
  18. angular 的navigate 各种使用情况
  19. Zabbix3.x 监控磁盘IO与自定义模板
  20. djangobb之view form

热门文章

  1. python xpath图片爬取
  2. Vue.js 源码分析(三十二) 总结
  3. dedecms5.7的文章详情页页面标题加载指定txt文本的随机关键字
  4. 2.将视图添加到 ASP.NET Core MVC 应用
  5. XtraReport报表入库单数字转中文大写数字
  6. Android探索之百度地图开发
  7. LeetCode——Duplicate Emails(使用group by以及having解决分组统计结果)
  8. 利用Python模拟登录pastebin.com
  9. Git学习笔记2-版本控制
  10. Rust中的Slices