AtCoder Beginner Contest 217 D~E
比赛链接:Here
ABC水题,
D - Cutting Woods
题意:开始一根木棒长度为 \(n\) 并以 \(1\) 为单位在木棒上标记\((1\sim n)\) ,输出 \(q\) 次操作
- 操作 \(1\) 断开 \(x\) 所在的木棒:\([1,n]\) 在 \(x\) 断开变成了 \([1,x],[x + 1,n]\)
- 操作 \(2\) 查询 \(x\) 所在区间的长度
数据范围:\(n\le 10^{9},q\le 1e5,1\le x\le 1e9\)
题解:
一开始没有想到这个性质所以卡住了,
在分割之后左边以及右边这个区间的答案是固定的,也就是说答案只跟分割点有关,比如区间 \([l,r]\) 分割 \(x\) 变成了 \([l,x],[x+1,r]\)
可以发现可以发现
\(l\) 到 \(x\) 这个区间的询问答案都是 \(x−l+1\)
\(x+1\) 到 \(r\) 这个区间的询问答案都是 \(r−l+1\)
所以可以考虑二分找到所在区间相邻 \(2\) 个的分割点下标
先考虑边界问题
边界无非是:\(0\sim n + 1,0\sim n,1\sim n,1\sim n +1\) 这 \(4\) 种的其中一种
这个时候先假设区间是 \([1,2],[3,4],[5]\)
分割点是 0/1 2 4 5/5+1
对于查询2
找到第一个大于等于2的数是2
第一个小于2的数应该是 0/1
答案是2
所以应该是 2 - 0 = 2
左边界应该是0在考虑查询5
答案是1
找到第一个大于等于5的数是5/6
第一个小于5的数应该是4
所以应该是 5 - 4 = 1
右边界是n在考虑二分操作的时候 分割点数组保持有序
所以可以用set动态维护
时间复杂度:\(\mathcal{O}(Nlog N)\)
set<int>s;
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr);
int n, m;
cin >> n >> m;
s.insert(0);
s.insert(n);
while (m--) {
int c, x;
cin >> c >> x;
if (c == 1) s.insert(x);
else
cout << *s.lower_bound(x) - *--s.upper_bound(x) << "\n";
// 因为没 -- 调了半天
}
}
E - Sorting Queries
题意:给出一个空的序列和 \(q\) 次操作
- 操作 \(1\): 在序列末尾添加一个数 \(x\)
- 操作 \(2\) :输出序列第一个数
- 操作 \(3\):给当前序列排序
数据范围:\(q\le 1e5,1\le x\le 1e9\)
题解:
假设不考虑操作 \(3\),那么我们可直接模拟,
但在操作 \(3\)的影响下,需要维护排序对队列的影响,
假设队列中两个元素,\(head,fail\) 对应队头和队尾
暴力时间复杂度是 \(\mathcal{O}(n^2 logn)\) 肯定是不可取的
在排序的时候我们可以考虑边插入边排序,用 \(set\) 维护
然后把对头指向 \(set\) 后面的第一个下标
这样时间复杂度便降到了 \(\mathcal{O}(n logn)\)
const int N = 1e6 + 10;
ll a[N];
multiset<ll>s;
bool st[N];
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr);
int head = 0, fail = 0;
int t; cin >> t;
int k = 1; // k = 1 表示队列第一个数的下标是1
while (t--) {
int op; cin >> op;
if (op == 1) {
int x; cin >> x;
a[++fail] = x;
} else if (op == 2) {
// 如果排序过
if (s.size()) {
cout << *s.begin() << "\n" ;
s.erase(s.begin());
} else {
cout << a[k] << "\n";
st[k] = 1;
k += 1;
}
} else {
for (int i = k ; i <= fail ; i ++) {
if (!st[i]) s.insert(a[i]) ;
}
// 插入之后 对头指向队尾的下一个下标
k = fail + 1 ;
}
}
}
AtCoder Beginner Contest 217 D~E的更多相关文章
- AtCoder Beginner Contest 100 2018/06/16
A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...
- AtCoder Beginner Contest 052
没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...
- AtCoder Beginner Contest 053 ABCD题
A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...
- AtCoder Beginner Contest 136
AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...
- AtCoder Beginner Contest 137 F
AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...
- AtCoder Beginner Contest 076
A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...
- AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】
AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...
- AtCoder Beginner Contest 064 D - Insertion
AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...
- AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle【暴力】
AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle 我要崩溃,当时还以为是需要什么离散化的,原来是暴力,特么五层循环....我自己写怎么都 ...
- AtCoder Beginner Contest 075 C bridge【图论求桥】
AtCoder Beginner Contest 075 C bridge 桥就是指图中这样的边,删除它以后整个图不连通.本题就是求桥个数的裸题. dfn[u]指在dfs中搜索到u节点的次序值,low ...
随机推荐
- 关于点赞业务对MySQL和Redis和MongoDB的思考
点赞 在我个人理解中,点赞业务比较频繁,很多人业务可能都会有这个,比如:博客,视频,文章,动态,评论等,但是不应该是核心业务,不应该大量地请求MySQL数据库,给数据库造成大量的资源消耗,MySQ ...
- 基于 Webpack5 Module Federation 的业务解耦实践
我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:贝儿 前言 本文中会提到很多目前数栈中使用的特定名词,统一 ...
- MySQL日期查询
MySQL日期查询 1.今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 2.昨天 SELECT * FROM 表名 WHERE T ...
- 有一个正整数N可以分解成若干个正整数之和,问如何分解能使这些数的乘积最大?
这可真是个有意思的问题,之前好像在刷题的时候也碰到过类似的问题 问题的解决是:我们由均值不等式可以知道,当每个数相等的时候,有乘积最大. 那么所以实际上就是将这个数均分,假如正整数N为 k,假设分成n ...
- Java操作Word修订功能:启用、接受、拒绝、获取修订
Word的修订功能是一种在文档中进行编辑和审阅的功能.它允许多个用户对同一文档进行修改并跟踪这些修改,以便进行审查和接受或拒绝修改.修订功能通常用于团队合作.专业编辑和文件审查等场景. 本文将从以下几 ...
- Centos7 Zabbix3.2安装(yum)
http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/ #官网下载地址(只包含zabbix的应用包) ftp://47.104.78.123/zabbix/ ...
- 斯坦福 UE4 C++ ActionRoguelike游戏实例教程 14. 使用GameplayTag实现防守反击技能
斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论 概述 本篇文章对应Lecture 17 - GameplayTags, 70节.本文将会结合前几节课使用的能力系统和G ...
- 聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(完结篇)
前言 书接上回,上回我们了解了 castle 代理的一些缺点,本文将开始操作整合 Microsoft.Extension.Dependency和Castle,以让默认的容器可以支持拦截器 我们将以进阶 ...
- Docker、pre-commit 导致的 git commit 报错:找不到 python 3.8
到这个问题的原因可能有很多,这里只是记录下针对我遇到这这跟题的原因及解决方法 问题描述 执行 git commit 命令,报错 /usr/bin/env: 'python3.8': No such f ...
- 2023-08-28:用go语言编写。给你一个正整数数组nums, 同时给你一个长度为 m 的整数数组 queries。 第 i 个查询中,你需要将 nums 中所有元素变成 queries[i] 。
2023-08-28:用go语言编写.给你一个正整数数组nums, 同时给你一个长度为 m 的整数数组 queries. 第 i 个查询中,你需要将 nums 中所有元素变成 queries[i] . ...