思路:

线段树好题。对a数组中的每个元素从左到右依次操作,判断最终是否能够转化成b数组。在此过程中使用线段树维护区间最小值判断是否能够进行合法操作。

实现:

 #include <bits/stdc++.h>
using namespace std;
const int N = , INF = 0x3f3f3f3f;
deque<int> d[N];
int a[N], b[N], tree[N * ]; void build(int num, int l, int r)
{
if (l == r) { tree[num] = a[l]; return; }
int m = l + r >> ;
build(num << , l, m);
build(num << | , m + , r);
tree[num] = min(tree[num << ], tree[num << | ]);
} void update(int num, int l, int r, int x, int y)
{
if (l == r) { tree[num] = y; return; }
int m = l + r >> ;
if (x <= m) update(num << , l, m, x, y);
else update(num << | , m + , r, x, y);
tree[num] = min(tree[num << ], tree[num << | ]);
} int query(int num, int l, int r, int x, int y)
{
if (x <= l && y >= r) return tree[num];
int m = l + r >> ;
int ans = INF;
if (x <= m) ans = min(ans, query(num << , l, m, x, y));
if (y >= m + ) ans = min(ans, query(num << | , m + , r, x, y));
return ans;
} int main()
{
int t, n; cin >> t;
while (t--)
{
cin >> n;
for (int i = ; i <= n; i++) d[i].clear();
for (int i = ; i <= n; i++) { cin >> a[i]; d[a[i]].push_back(i); }
build(, , n);
for (int i = ; i <= n; i++) cin >> b[i];
bool flg = true;
int i = , j = ;
while (i <= n && j <= n)
{
while (i <= n && a[i] == INF) i++;
if (a[i] == b[j]) { d[a[i]].pop_front(); i++; j++; }
else if (a[i] < b[j]) { flg = false; break; }
else
{
if (d[b[j]].empty()) { flg = false; break; }
else
{
int t = d[b[j]].front();
int minn = query(, , n, i, t);
if (minn < a[t]) { flg = false; break; }
else
{
update(, , n, t, INF); a[t] = INF;
d[b[j]].pop_front();
j++;
}
}
}
}
cout << (flg ? "YES" : "NO") << endl;
}
return ;
}

CF1187D Subarray Sorting的更多相关文章

  1. CF1187D Subarray Sorting(神奇思路,线段树)

    说实话,$2200$ 的题做不出来也有点丢脸了…… 当然要先判所有数出现次数相同. 首先区间排序就相当于交换相邻两个数,前面的数要大于后面的数才能交换. 然后就不会了…… 我们考虑 $b_1$ 到 $ ...

  2. Educational Codeforces Round 67 D. Subarray Sorting

    Educational Codeforces Round 67 D. Subarray Sorting 传送门 题意: 给出两个数组\(a,b\),现在可以对\(a\)数组进行任意次排序,问最后能否得 ...

  3. CodeForces 1187D Subarray Sorting

    Problem You are given an array \(a_1\),\(a_2\),-,\(a_n\) and an array \(b_1\),\(b_2\),-,\(b_n\). For ...

  4. Subarray Sorting (线段树)

    题意:给你两个长度为 n 的序列 a 和 b , 可以对 a 进行 操作: 选择一段区间[ l, r ] ,使得序列a 在这段区间里 按升序排序. 可以对a 进行任意多次操作,问 a是否有可能变成b序 ...

  5. 【Edu 67】 补题记录

    CF1187D. Subarray Sorting 想要把一个数x换到前面,x一定是小一点的值.由于B串是固定的,A串可调整,我们可以遍历B数组,对于B[i],找到对于在A数组的位子pos,判断1-p ...

  6. Educational Codeforces Round 67

    Educational Codeforces Round 67 CF1187B Letters Shop 二分 https://codeforces.com/contest/1187/submissi ...

  7. 2021record

    2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...

  8. Codeforces Educational Codeforces Round 67

    目录 Contest Info Solutions A. Stickers and Toys B. Letters Shop C. Vasya And Array D. Subarray Sortin ...

  9. [LeetCode] Maximum Size Subarray Sum Equals k 最大子数组之和为k

    Given an array nums and a target value k, find the maximum length of a subarray that sums to k. If t ...

随机推荐

  1. 自己实现sizeof+大小端测试

    #define my_sizeof(type) ((char *)(&type+1)-(char*)(&type)) 同时大小端测试 如下 #include <stdio.h&g ...

  2. struts2之使用oracle分页(10)

    ToolsUtil //每页显示的记录数 public static final int NUM_PER_PAGE=5; /* * java.util.Date转java.sql.Date */ pu ...

  3. Java8-Annotations

    import java.lang.annotation.ElementType; import java.lang.annotation.Repeatable; import java.lang.an ...

  4. python通用分页功能

    实现: class Page: def __init__(self,current_page,data_count,per_page_count=10,pager_num=10): self.curr ...

  5. mouseover([[data],fn])

    mouseover([[data],fn]) 概述 当鼠标指针位于元素上方时,会发生 mouseover 事件. 该事件大多数时候会与 mouseout 事件一起使用.直线电机选型 注释:与 mous ...

  6. vs2015 调试 无法启动程序

    应用程序输出在这个目录 E:\learn\3dlesson\lesson1_createwindow\build\Debug 项目属性 解决方案: 把项目设为启动项目.

  7. 北大ACM - POJ试题分类(转自EXP)

    北大ACM - POJ试题分类 -- By EXP 2017-12-03 转载请注明出处: by EXP http://exp-blog.com/2018/06/28/pid-38/ 相关推荐文: 旧 ...

  8. SpringMVC配置数据验证(JSR-303)

    这篇文章已经过时了. 请参考比较合适的前后端交互方式. 1.pom.xml中追加hibernate-validator 2.在dto类的域上追加JSR-303的注解 public class Data ...

  9. 指针——可能我学的还只是c++的皮毛

    C. 线性链表的插入与删除 单点时限: 2.0 sec 内存限制: 256 MB 实现线性链表的插入与删除操作 只需完成给定函数的定义. NODE* insertLinklist(NODE* head ...

  10. docker数据持久化

    转载/参考: https://www.jianshu.com/p/ef0f24fd0674 Docker的数据持久化主要有两种方式: bind mount docker managed volume ...