比赛链接: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的更多相关文章

  1. AtCoder Beginner Contest 100 2018/06/16

    A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...

  2. AtCoder Beginner Contest 052

    没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...

  3. AtCoder Beginner Contest 053 ABCD题

    A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...

  4. AtCoder Beginner Contest 136

    AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...

  5. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

  6. AtCoder Beginner Contest 076

    A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...

  7. AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】

    AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...

  8. AtCoder Beginner Contest 064 D - Insertion

    AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...

  9. AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle【暴力】

    AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle 我要崩溃,当时还以为是需要什么离散化的,原来是暴力,特么五层循环....我自己写怎么都 ...

  10. AtCoder Beginner Contest 075 C bridge【图论求桥】

    AtCoder Beginner Contest 075 C bridge 桥就是指图中这样的边,删除它以后整个图不连通.本题就是求桥个数的裸题. dfn[u]指在dfs中搜索到u节点的次序值,low ...

随机推荐

  1. Java 21增强对Emoji表情符号的处理了

    现一个 Java 21 中有意思的东西! 在java.Lang.Character类中增加了用于确定字符是否为 Emoji 表情符号的 API,主要包含下面六个新的静态方法: public stati ...

  2. 【Javaweb】implements Serializable是什么意思?反序列化是什么意思?

    为了保证数据传输的可靠 性,常常要implements Serializable,为什么? 对象本质上是虚无缥缈的,只是内存中的一个地址,如果想要让对象持久化,让对象在网络上传输,总不可能传送一个内存 ...

  3. 一次显著的性能提升,从8s到0.7s

    前言 最近我在公司优化了一些慢查询SQL,积累了一些SQL调优的实战经验. 我之前写过一些SQL优化相关的文章<聊聊SQL优化的15个小技巧>和<explain | 索引优化的这把绝 ...

  4. VScode怎么实现c的运行,这里只讲述一些细节

    第一下载的Vscode要设置信任模式,否则你后面搞什么都没有用 第二下载minGw还是gcc 都行 第三安装插件,c,c++. 然后编译就行了,我搞了一天,主要弹出的是未找到exe文件,但是我告诉大家 ...

  5. 芯片SDC约束 -复制保存

    https://www.cnblogs.com/pcc-uvm/p/16996456.html?share_token=9651df97-e94c-4653-bf71-0a0fd6ca415e& ...

  6. k8s安装etcd出现Job for etcd.service failed......"journalctl -xe" for details.

    错误如下 先按照提示,输入 journalctl -xe 看一些详细信息 1.针对:start request repeated too quickly for etcd.service 错误,解决办 ...

  7. 2023年国家基地“楚慧杯”网络安全实践能力竞赛初赛-Crypto+Misc WP

    Misc ez_zip 题目 4096个压缩包套娃 我的解答: 写个脚本直接解压即可: import zipfile name = '附件路径\\题目附件.zip' for i in range(40 ...

  8. Zookeeper 的基本使用

    维基百科对 Zookeeper 的介绍如下所示: Apache ZooKeeper是 Apache 软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务.同步服务和命名注册 ZooKe ...

  9. Programming Abstractions in C阅读笔记:p246-p247

    <Programming Abstractions in C>学习第68天,p246-p247总结,总计2页. 一.技术总结 本章通过"the game of nim(尼姆游戏) ...

  10. Proxy下的Prepare透传,让GaussDB(for MySQL)更稳固,性能更卓越

    本文分享自华为云社区<Proxy下的Prepare透传,让GaussDB(for MySQL)更稳固,性能更卓越>,作者: GaussDB 数据库 . 1.引言 在很多业务场景下,数据库应 ...