Educational Codeforces Round 67 (Rated for Div. 2)
A
考虑之前选中没有一个的,那么结果就是\(min(n-s,n-t)\)
那么能选中的第一次就是这个结果\(+1\),但需要拥有两个
\((s>t)\)考虑一开始选不中\(t\),则但选中\(t\)时\(s\)也一定被选中了\((\)最坏的情况为\(s\)与\(t\)并集最小\()\)
\(ans=n-min(s,t)+1\)
B
简单想的复杂度高的算法:先\(sum_{i,j}\)表示文本串前\(i\)个字符\(j\)字符的个数
匹配串也用\(a\)统计每个字符的个数,二分一下判是否满足\(O(26n+\sum t_i+mlogn)\)复杂度下界
开个桶\(a_{i,j}\)表示文本串\(i\)字符第\(j\)个的位置
匹配串统计每个字符的个数,再在\(a\)里比较一下最大值\(O(n+26m)\)
C
题意:需要构造一个数组,有\(m\)个约束\((t,l,r)\)
\(t=1,a_{l,r}\)非严格递增;\(t=0,a_{l,r}\),至少有一对连续的位置\(a_{i}>a_{i+1}\)
思考怎么则不合理:唯一的情况为至少有一组\(t=0\)包含在\(t=1\)中
将\(t=1\)当做限制,\(t=0\)当做判断
一开始将数组严格递减构造,显然这样满足所有的\(t=0\);将\(t=1\)记录下来,按左区间的位置升序排序;
每次对于\((t=1,l,r)\)将\([l,r]\)的值赋为\(a_{l}\)
D
想到平衡树的做法不记得用\(STL\)结果打崩了
考虑前\(i-1\)已经匹配了,\(a_i≠b_i\),那么怎么移过来呢?假设远处有一个位置\(x\),满足\(a_x=b_i\)
能移动过来的条件为\(min[i,x]=b_i\)
平衡树则需要支持:区间最小值查询,单点查询,单点删除与添加,直接打崩
考虑用\(set+\)线段树实现:我们发现单点往前移有一个特点,移过的点都不会用到了
把\((a_i,i)\)放到\(set\)里,线段树维护区间最小值查询,我们需要使得线段树仅维护单点修改就能实现之前的状态
每次用\(set\)找出第一个符合大于等于的:
就相当于如果\(set\)里还有第一个关键字为\(b_i\),找到第二个关键字\((\)原数组位置\(x)\)最小的
找到后将\(x\)在线段树值为\(inf\),并在\(set\)里删去\((\)因为\(i\)这个点之后没有用了\()\),也就是相对位置不变如果没有就失败
\(rank2's code\)
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
typedef long double ld;
typedef long long ll;
const int maxN = 3 * (int)1e5 + 100;
int b[maxN];
int t[4 * maxN];
int a[maxN];
void build(int v, int tl, int tr) {
    if (tl == tr) {
        t[v] = a[tl];
        return;
    }
    int tm = (tl + tr) / 2;
    build(v + v, tl, tm);
    build(v + v + 1, tm + 1, tr);
    t[v] = min(t[v + v], t[v + v + 1]);
}
void upd(int v, int tl, int tr, int pos, int val) {
    if (tl == tr) {
        t[v] = val;
        return;
    }
    int tm = (tl + tr) / 2;
    if (pos <= tm) upd(v + v, tl, tm, pos, val);
    else upd(v + v + 1, tm + 1, tr, pos, val);
    t[v] = min(t[v + v], t[v + v + 1]);
}
const int INF = (int)1e9 + 100;
int get(int v, int tl, int tr, int l, int r) {
    if (l > r) return INF;
    if (tl == l && tr == r) {
        return t[v];
    }
    int tm = (tl + tr) / 2;
    return min(get(v + v, tl, tm, l, min(r, tm)), get(v + v + 1, tm + 1, tr, max(l, tm + 1), r));
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    //freopen("input.txt", "r", stdin);
    int q;
    cin >> q;
    while (q--) {
        int n;
        cin >> n;
        set < pair < int, int > > s;
        for (int i = 1; i <= n; i++) {
            cin >> a[i];
            s.insert(make_pair(a[i], i));
        }
        bool ok = true;
        build(1, 1, n);
        for (int i = 1; i <= n; i++) {
            cin >> b[i];
            if (!ok) continue;
            auto it = s.lower_bound(make_pair(b[i], -1));
            if (it == s.end() || ((it -> first) != b[i])) {
                ok = false;
                continue;
            }
            int ind = (it -> second);
            s.erase(it);
            if (b[i] != get(1, 1, n, 1, ind)) {
                ok = false;
            }
            upd(1, 1, n, ind, INF);
        }
        if (ok) cout << "YES" << '\n';
        else cout << "NO" << '\n';
    }
    return 0;
}
E
很裸的换根
考虑\(1\)作为点,\(ans=\sum size_i\),只需要考虑从\(u\)移到\(v\)u和\(v\)的子树大小变化就好了
F
Educational Codeforces Round 67 (Rated for Div. 2)的更多相关文章
- Educational Codeforces Round 67 (Rated for Div. 2) B题【前缀+二分】【补题ING系列】
		
题意:给出一个字符串s, 可以从左往右拿走s的字符, 至少要到s的第几个位置才能拼成t 思路:用二维数组记录前缀,然后二分即可. #include<bits/stdc++.h> using ...
 - Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship
		
Problem Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...
 - Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)
		
Problem Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...
 - Educational Codeforces Round 43 (Rated for Div. 2)
		
Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ...
 - Educational Codeforces Round 35 (Rated for Div. 2)
		
Educational Codeforces Round 35 (Rated for Div. 2) https://codeforces.com/contest/911 A 模拟 #include& ...
 - Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
		
Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ...
 - Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes
		
Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes 题目连接: http://code ...
 - Educational Codeforces Round 63 (Rated for Div. 2) 题解
		
Educational Codeforces Round 63 (Rated for Div. 2)题解 题目链接 A. Reverse a Substring 给出一个字符串,现在可以对这个字符串进 ...
 - Educational Codeforces Round 39 (Rated for Div. 2) G
		
Educational Codeforces Round 39 (Rated for Div. 2) G 题意: 给一个序列\(a_i(1 <= a_i <= 10^{9}),2 < ...
 
随机推荐
- Mybatis中三种关联关系的实现
			
目录 一对一查询 一对多查询 自关联查询: 多对多查询 总结: 三种关联关系:一对多,一对一,多对多 两种查询方式:嵌套查询,连接查询(也可称作:多表单独查询,多表连接查询) 每一种关联关系都可以通过 ...
 - 设置body样式问题
			
如果我给body设置成一个宽高为200px的正方形,背景为红色,但是整个html也变成了红色,而且是整个浏览器屏幕都是红的,怎么来处理,如下 给html单独设置一个背景颜色,比如为白色#fff,在给b ...
 - 离线安装zabbix文档
			
为了离线安装需要离线安装包,可以通过这个方式获取. 用yum安装软件默认不保存软件包,要保存需修改配置文件 # vi /etc/yum.conf 将keepcache的值改为1 安装版本:rel ...
 - Swift枚举的全用法
			
鉴于昨天开会部门会议讨论的时候,发现有些朋友对枚举的用法还是存在一些疑问,所以就写下这个文章,介绍下Swift下的枚举的用法. 基本的枚举类型 来,二话不说,我们先贴一个最基本的枚举: enum Mo ...
 - 设置yum自动更新
			
[wang@brady ~]$ sudo yum -y install cronie yum-cron sudo vim /etc/yum/yum-cron.conf apply_updates = ...
 - Linux下环境变量设置 (转)
			
Linux下环境变量设置 1.在Windows 系统下,很多软件安装都需要配置环境变量,比如 安装 jdk ,如果不配置环境变量,在非软件安装的目录下运行javac 命令,将会报告找不到文件,类似的错 ...
 - 【转】MCU厂商简介
			
国内MCU市场已达360亿元,2020年将超500亿元.2016年,国内MCU市场已达360亿元,同比增长达11%,而据IC Insights预测,随着中国大陆汽车电子和物联网领域的快速发展,对MCU ...
 - 调试freeradius 3.0 与microsoft AD通过LDAP认证的笔记
			
首先来参考文章: a.https://blog.51cto.com/liqingbiao/2146832?utm_source=oschina-app 这个主要参考了基本安装.配置.测试 b.http ...
 - 【实战1】记一次提至administrator权限历程
			
本文首发于先知社区 https://xz.aliyun.com/t/5080 前言:这是一次挖掘cms通用漏洞时发现的网站,技术含量虽然不是很高,但是也拿出来和大家分享一下吧,希望能给一部分人带来收获 ...
 - LeetCode - 82、删除排序链表中的重复元素 II
			
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例 1: 输入: 1->2->3->3->4->4->5 输出: 1 ...