AtCoder Beginner Contest 217 D - Cutting Woods(set + 二分查找)
题目大意
有一根长度为L的木头,这根木头上有L - 1个可以劈的点,对这根木头进行q次操作,操作有两种:操作一是往一个可劈点劈一刀,把这个点所在的木头段劈成两段;操作二是输出一个可劈点所在木头段的长度。
思路
直接用一个set存操作一所劈的点,因为set保证了所劈的点是递增的,所以对于操作二,直接用lower_bound找到第一个比要找的可劈点大的已劈点,然后lower_bound找到的位置后退一位就是第一个比要找的可劈点小的已劈点,两者相减就是该可劈点所在木头段的长度。
因为存在set中第一个已劈点比操作二的可劈点大或者set中最后一个已劈点比操作二的可劈点小的情况,所以一开始直接把0和木头长度L放到set中,这样就少了很多判断。
心得
比赛的时候一直TLE,但是方法就是set + lower_bound,最后比赛完看了一下tourist的代码,发现set本身就自带lower_bound函数,而我并不知道,直接用了algorithm库里的lower_bound,差不多一个半小时都是TLE…
#include <bits/stdc++.h>
using namespace std;typedef long long ll;set<int> s;int main()
{int len, q;scanf("%d%d", &len, &q);set<int>:: iterator it;s.insert(0);s.insert(len);while(q--){int op;scanf("%d", &op);if(op == 1){int a;scanf("%d", &a);s.insert(a);}else{int a;scanf("%d", &a);it = s.lower_bound(a);// 比赛时我的错代码...// it = lower_bound(s.begin(), s.end(), a);int r = *it;it--;int l = *it;printf("%d\n", r - l);}}return 0;
}
AtCoder Beginner Contest 217 D - Cutting Woods(set + 二分查找)相关推荐
- [2021-09-04 AtCoder Beginner Contest 217] 题解
文章目录 A - Lexicographic Order B - AtCoder Quiz C - Inverse of Permutation D - Cutting Woods E - Sorti ...
- AtCoder Beginner Contest 217
更新中- A - Lexicographic Order 题目大意: 给定两个字符串 S 和 T ,判断两者字典序的大小关系. 大致思路: 常规比较字典序. char[] 实现: #include & ...
- AtCoder Beginner Contest 217 A B C D E G 题解
第一次6题纪念第一次6题纪念第一次6题纪念 A - Lexicographic Order 题意: s字符串的字典序是否小于ts字符串的字典序是否小于ts字符串的字典序是否小于t 思路: 模拟模拟模拟 ...
- AtCoder Beginner Contest 202 D - aab aba baa(组合计数,字典序)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Problem 有 AAA 和 aaa,BBB 个 bbb ,可以使用这 A+BA+BA+B 个字符任 ...
- AtCoder Beginner Contest 197 题解(A ~ F)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Rotate B - Visibility C - ORXOR D - Opposite ...
- AtCoder Beginner Contest 198 (A ~ F)题解
目录 A. Div B. Palindrome with leading zeros C. Compass Walking D. Send More Money E. Unique Color F. ...
- AtCoder Beginner Contest 215 G - Colorful Candies 2
AtCoder Beginner Contest 215 G - Colorful Candies 2 有n个糖果,每个糖果有着一个颜色a[i],每次拿k个糖果期望拿到E(x)个不同颜色的糖果,求出k ...
- AtCoder Beginner Contest 215 F - Dist Max 2
AtCoder Beginner Contest 215 F - Dist Max 2 平面上有一系列的点(xi,yi)(x_i,y_i)(xi,yi),定义两点(xi,yi),(xj,yj)(x ...
- AtCoder Beginner Contest 215 E - Chain Contestant
AtCoder Beginner Contest 215 E - Chain Contestant 给出一个只包括A~J的字符串,定义一种子序列为:在这个子序列中,相同的字符必定连续出现,求出这样的子 ...
最新文章
- Fragment之间传递数据的方式
- html全局属性什么意思,# HTML # HTML全局属性
- go语言基础到提高(5)-结构
- 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1066:满足条件的数累加
- 【mark】linux 终端命令行下的快捷键(自己已验证所有)
- LG P4074 [WC2013] 糖果公园(带修莫队,树上莫队)
- Spark入门(十二)之最值
- MIT最新课程:一文看尽深度学习各领域最新突破(附视频、PPT)
- 深入理解Spring Redis的使用 (九)、通过Redis 实现 分布式锁 的 BUG,以及和数据库加锁的性能测试...
- ---M文件-函数式M文件/脚本式、m文件基本构成
- Oracle 11g 字符集修改
- ActiveMQ 无法启动 提示端口被占用 解决方案
- Windows安装JDK
- 到底是什么决定了路由器的信号强弱和穿墙能力?
- TS合并TS文件解码TS文件解密TS解码工具
- Map与数组、对象之间的转换
- 比特率控制模式ABR、VBR、CBR
- Java中输入一个整形数组,输出其最大值。
- Nature综述:一文揭秘土壤微生物的生死过程如何影响生物地球化学
- 貌似淘宝下拉PopWindow筛选【动画、列表、位置】