题目链接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相关推荐

  1. AtCoder Beginner Contest 217 D - Cutting Woods(set + 二分查找)

    题目大意 有一根长度为L的木头,这根木头上有L - 1个可以劈的点,对这根木头进行q次操作,操作有两种:操作一是往一个可劈点劈一刀,把这个点所在的木头段劈成两段:操作二是输出一个可劈点所在木头段的长度 ...

  2. [2021-09-04 AtCoder Beginner Contest 217] 题解

    文章目录 A - Lexicographic Order B - AtCoder Quiz C - Inverse of Permutation D - Cutting Woods E - Sorti ...

  3. AtCoder Beginner Contest 217 A B C D E G 题解

    第一次6题纪念第一次6题纪念第一次6题纪念 A - Lexicographic Order 题意: s字符串的字典序是否小于ts字符串的字典序是否小于ts字符串的字典序是否小于t 思路: 模拟模拟模拟 ...

  4. AtCoder Beginner Contest 217

    更新中- A - Lexicographic Order 题目大意: 给定两个字符串 S 和 T ,判断两者字典序的大小关系. 大致思路: 常规比较字典序. char[] 实现: #include & ...

  5. AtCoder Beginner 217 Solution

    AtCoder Beginner 217 Solution⁡\operatorname{AtCoder\ Beginner\ 217\ Solution}AtCoder Beginner 217 So ...

  6. 【题解】POJ2311 Cutting Game

    link 题目大意 有一 W × H W\times H W×H 的矩阵,两人博弈,每次可以沿网格水平切割或竖直切割,当切割后出现 1 × 1 1\times 1 1×1 的格子则获胜.给定 W , ...

  7. UVA 818 Cutting Chains(状压 + 暴搜)题解

    题意:有1~n个小环,他们中的有些互相扣在一起,问你至少切开几个能把这写小环串成一条链 思路:还是太菜了,题目给的n<=15,显然可以暴力解决. 用二进制表示每个环切还是不切,然后搜索所有情况. ...

  8. 小白题解 Codeforces 794B Cutting Carrot

    (水题)题目链接:点击打开链接 题目大意:给定一个三角形,底始终为1,高h,用平行于底边的线将它分成面积相等的n份,分别求第i份的底边到大三角形定点的距离. 分析:设第i份对应高为Y,由每份面积相等可 ...

  9. Codeforces Round #300 A. Cutting Banner 水题

    A. Cutting Banner Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/538/pro ...

最新文章

  1. C++关系运算符和关系表达式
  2. 【numpy】np.genfromtxt非常的慢,并且需要读取文件的10倍内存
  3. EIRP/ERP(有效辐射功率)基本概念
  4. mysql导入分卷_php实现mysql备份恢复分卷处理的方法_PHP
  5. 从LASSO回归到结构性稀疏:线性回归的正则项都带来了什么?
  6. 首届Hadoop技术社区中国meetup来袭!对外报名正式启动!
  7. vc socket api建立TCP连接(包括域名解析)并收发数据的代码模板
  8. 各大厂抢招WPF,小米这回是下了血本啊...
  9. 两天学会css基础(一)
  10. zabbix监控tomcat服务
  11. 苹果Mac备份应用推荐:Get Backup Pro
  12. 11位大牛与您共建数智升级路径
  13. anaconda简单解决PackagesNotFoundError: The following packages are not available from current channels:
  14. C语言程序设计题库附答案
  15. 为什么看不起trap_【全国电子音乐交流中心】为什么年轻人全听Trap去了?
  16. 浙江大学 工程伦理 第二章单元测试答案
  17. Queue和Deque
  18. SpringBoot + Excel 读写技术与实际问题解决
  19. 设计模式全解析(一)——带你搞懂设计模式
  20. UE4消除后期对透明材质的影响

热门文章

  1. 微信自定义分享、二次分享解决方案
  2. 网站会员登录,注册设计
  3. 微信开挂怎么防止封号_为什么我的微信老是被封解决办法 微信如何防止被封号详细介绍...
  4. matplotlib画小米新LOGO
  5. 从刘老师的进化的力量到有感,疫情阶段如何弯道超车
  6. Spring集成Activemq使用
  7. cocos2dx3.16输入框:TextField和EditBox的使用
  8. 苹果/安卓直播短视频APP系统源码
  9. ubuntu 双显示屏设置 一个正常 一个不行的问题
  10. 2017百度秋招真题笔试之十字架