【题解】Cutting Woods
题目链接https://vjudge.csgrandeur.cn/contest/486840#problem/E
- 题意很简单,给我们一个长度为N的区间,有M次询问,每次询问是两种操作之一:1.在x坐标处,将x所在区间一分为二。2.询问x点在哪个区间。
- 这道题我开始思路没错,有序存下每个点,每次询问x所在区间时取分别第一个小于x点和第一个大于x点的坐标(从题意看询问x所在区间时不会与区间边重合,否则会产生歧义——左右区间都符合条件)。
- 但是我第一思路居然是 sort(vector)+二分,果不其然超时。估计是在询问时每添加一个数都要sort排序严重拖慢时间。
- 于是想到会不会是线段树,写了一会发觉不太对劲,这个题用线段树写起来着实有些费劲。
- 最后终于发现,原来用set可以轻松解决。容器真好用,学算法不如学容器hhh
AC代码:
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
#include<set>using namespace std;
typedef pair<int, int > PII;const int N = 2e5 + 10;int n, m;
set<int>p;//大意了,没有想到set居然速度这么快,居然傻傻二分int main()
{scanf("%d%d", &n, &m);p.insert(0), p.insert(n);//初始条件while (m--){int c, x;scanf("%d%d", &c, &x);if (c == 1)p.insert(x);else{auto t = p.lower_bound(x);printf("%d\n", *t - *(--t));}}return 0;
}
错误示范:
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>using namespace std;
typedef pair<int, int > PII;const int N = 2010;int n, m;
vector<int>p;int erfen(int x)
{int l = 0, r = (int)p.size() - 1;while (l < r){int mid = (l + r+1) / 2;if (p[mid] < x)l = mid;else r = mid - 1;}return l;
}
int main()
{scanf("%d%d", &n, &m);p.push_back(0), p.push_back(n);int flag = 1;while (m--){int c, x;scanf("%d%d", &c, &x);if (c == 1)p.push_back(x), flag = 1;else{if(flag==1)sort(p.begin(), p.end());int k = erfen(x);printf("%d\n", p[k+1] - p[k]);flag = 2;}}return 0;
}
【题解】Cutting Woods相关推荐
- AtCoder Beginner Contest 217 D - Cutting Woods(set + 二分查找)
题目大意 有一根长度为L的木头,这根木头上有L - 1个可以劈的点,对这根木头进行q次操作,操作有两种:操作一是往一个可劈点劈一刀,把这个点所在的木头段劈成两段:操作二是输出一个可劈点所在木头段的长度 ...
- [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 B C D E G 题解
第一次6题纪念第一次6题纪念第一次6题纪念 A - Lexicographic Order 题意: s字符串的字典序是否小于ts字符串的字典序是否小于ts字符串的字典序是否小于t 思路: 模拟模拟模拟 ...
- AtCoder Beginner Contest 217
更新中- A - Lexicographic Order 题目大意: 给定两个字符串 S 和 T ,判断两者字典序的大小关系. 大致思路: 常规比较字典序. char[] 实现: #include & ...
- AtCoder Beginner 217 Solution
AtCoder Beginner 217 Solution\operatorname{AtCoder\ Beginner\ 217\ Solution}AtCoder Beginner 217 So ...
- 【题解】POJ2311 Cutting Game
link 题目大意 有一 W × H W\times H W×H 的矩阵,两人博弈,每次可以沿网格水平切割或竖直切割,当切割后出现 1 × 1 1\times 1 1×1 的格子则获胜.给定 W , ...
- UVA 818 Cutting Chains(状压 + 暴搜)题解
题意:有1~n个小环,他们中的有些互相扣在一起,问你至少切开几个能把这写小环串成一条链 思路:还是太菜了,题目给的n<=15,显然可以暴力解决. 用二进制表示每个环切还是不切,然后搜索所有情况. ...
- 小白题解 Codeforces 794B Cutting Carrot
(水题)题目链接:点击打开链接 题目大意:给定一个三角形,底始终为1,高h,用平行于底边的线将它分成面积相等的n份,分别求第i份的底边到大三角形定点的距离. 分析:设第i份对应高为Y,由每份面积相等可 ...
- Codeforces Round #300 A. Cutting Banner 水题
A. Cutting Banner Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/538/pro ...
最新文章
- C++关系运算符和关系表达式
- 【numpy】np.genfromtxt非常的慢,并且需要读取文件的10倍内存
- EIRP/ERP(有效辐射功率)基本概念
- mysql导入分卷_php实现mysql备份恢复分卷处理的方法_PHP
- 从LASSO回归到结构性稀疏:线性回归的正则项都带来了什么?
- 首届Hadoop技术社区中国meetup来袭!对外报名正式启动!
- vc socket api建立TCP连接(包括域名解析)并收发数据的代码模板
- 各大厂抢招WPF,小米这回是下了血本啊...
- 两天学会css基础(一)
- zabbix监控tomcat服务
- 苹果Mac备份应用推荐:Get Backup Pro
- 11位大牛与您共建数智升级路径
- anaconda简单解决PackagesNotFoundError: The following packages are not available from current channels:
- C语言程序设计题库附答案
- 为什么看不起trap_【全国电子音乐交流中心】为什么年轻人全听Trap去了?
- 浙江大学 工程伦理 第二章单元测试答案
- Queue和Deque
- SpringBoot + Excel 读写技术与实际问题解决
- 设计模式全解析(一)——带你搞懂设计模式
- UE4消除后期对透明材质的影响