题目描述

题目链接2041. 干草堆


算法1

思路

可以用差分+前缀和的思想,最后通过sort排序选择中位数

时间复杂度

O(nlogn)O(nlogn)O(nlogn)

C++ 代码

#include <iostream>using namespace std;const int N = 1e6 + 10;
int n, k;
int q[N];int main() {cin >> n >> k;// 一维差分for (int i = 1; i <= k; i ++) {int a, b;cin >> a >> b;q[a] += 1;q[b + 1] -= 1;}// 求前缀和for (int i = 1; i <= n; i ++) q[i] += q[i - 1];sort(q + 1, q + n + 1);cout << q[n + 1 >> 1] << endl;return 0;
}

算法2

思路

快速选择算法(快排的变形)

时间复杂度

O(n)O(n)O(n)

C++ 代码1

#include <iostream>using namespace std;const int N = 1e6 + 10;
int n, k;
int q[N];int quickSort(int l, int r, int k) {if (l >= r) return q[l];int i = l - 1, j = r + 1, x = q[l + r >> 1];while (i < j) {while (q[++ i] < x);while (q[-- j] > x);if (i < j) swap(q[i], q[j]);}if (k <= j) return quickSort(l, j, k);return quickSort(j + 1, r, k);
}int main() {cin >> n >> k;// 一维差分for (int i = 1; i <= k; i ++) {int a, b;cin >> a >> b;q[a] += 1;q[b + 1] -= 1;}// 求前缀和for (int i = 1; i <= n; i ++) q[i] += q[i - 1];cout << quickSort(1, n, n / 2 + 1) << endl;return 0;
}

C++ 代码2

用C++库函数nth_element

#include <iostream>
#include <algorithm>using namespace std;const int N = 1e6 + 10;
int n, k;
int q[N];int main() {cin >> n >> k;// 一维差分for (int i = 1; i <= k; i ++) {int a, b;cin >> a >> b;q[a] += 1;q[b + 1] -= 1;}// 求前缀和for (int i = 1; i <= n; i ++) q[i] += q[i - 1];nth_element(q + 1, q + n / 2 + 1, q + n + 1); // 比sort多了一个中间的参数,q+?的?是要查找的第k个数cout << q[n / 2 + 1] << endl;return 0;
}

如有错误以及可以改进的地方欢迎在下方评论区留言!

AcWing 2041. 干草堆相关推荐

  1. AcWing 2041. 干草堆(一维差分)

    题目:2041. 干草堆 题解:典型的一维差分题型 #include<bits/stdc++.h> #define x first #define y second using names ...

  2. acwing 2041.干草堆

    2014. 干草堆 题目 贝茜对她最近在农场周围造成的一切恶作剧感到抱歉,她同意帮助农夫约翰把一批新到的干草捆堆起来. 开始时,共有 N 个空干草堆,编号 1∼N. 约翰给贝茜下达了 K 个指令,每条 ...

  3. AcWing 2041. 干草堆(差分)

    题目链接 https://www.acwing.com/problem/content/2043/ 思路 因为我们前面有k个区间修改操作,最后求出中位数,由于是静态的,所以我们直接使用差分维护就好啦, ...

  4. AcWing每日一题2041. 干草堆

    AcWing每日一题2041. 干草堆 题目描述 贝茜对她最近在农场周围造成的一切恶作剧感到抱歉,她同意帮助农夫约翰把一批新到的干草捆堆起来. 开始时,共有 N 个空干草堆,编号 1∼N. 约翰给贝茜 ...

  5. 2041. 干草堆(前缀和差分)

    2041. 干草堆 题目 提交记录 讨论 题解 视频讲解 贝茜对她最近在农场周围造成的一切恶作剧感到抱歉,她同意帮助农夫约翰把一批新到的干草捆堆起来. 开始时,共有 NN 个空干草堆,编号 1∼N1∼ ...

  6. 算法每日一题——第六天——干草堆(差分)

    原题链接:2041. 干草堆 - AcWing题库 读完这道题大致可以把题分为两部分,第一部分需要统计每个干草堆所堆放的干草捆的数量,第二部分需要根据干草捆的数量对干草堆排序,输出排最中间的干草堆堆放 ...

  7. AcWing 2041:干草堆(差分)

    问题描述 贝茜对她最近在农场周围造成的一切恶作剧感到抱歉,她同意帮助农夫约翰把一批新到的干草捆堆起来. 开始时,共有 N 个空干草堆,编号 1∼N. 约翰给贝茜下达了 K 个指令,每条指令的格式为[ ...

  8. 干草堆——acwing算法题第二天

    题意分析: 该题想考的就是差分,把干草堆当成数组,求出差分数组后,恢复为原数组,输出中间值即可 代码: #include<stdio.h> #include<stdlib.h> ...

  9. Acwing2041. 干草堆

    题目:干草堆 贝茜对她最近在农场周围造成的一切恶作剧感到抱歉,她同意帮助农夫约翰把一批新到的干草捆堆起来. 开始时,共有 N 个空干草堆,编号 1∼N. 约翰给贝茜下达了 K 个指令,每条指令的格式为 ...

最新文章

  1. 使用访问器属性模拟java中的私有变量
  2. matplotlib绘图入门详解
  3. NYOJ 171 聪明的kk
  4. linux png pdf,将多页PDF转换为PNG并返回(Linux)
  5. 免推北京大学计算机研究生,北大推免研究生个人陈述
  6. mac环境下node.js和phonegap/cordova创建ios和android应用
  7. 怎么测试ajax get请求,为什么我的AJAX在运行测试时请求dev中的PUT请求,但请求了GET请求?...
  8. 差距50倍!为什么Web API第一次执行这么慢?
  9. 如何避免_如何避免变频器受负载冲击
  10. 对于基于模板的前端框架的补充
  11. onItemLongClick+onCreateContextMenu实现长按ListItem弹出不同菜单
  12. 深入学习c++(虚函数遇到析构函数就退化了)
  13. django singal 信号量
  14. 预应力内力计算时作用机理(纠结好久的问题orz)
  15. 【全面恢复受损的Word文档】
  16. Re:从0开始的微服务架构:(二)如何快速体验微服务架构?
  17. 专业测评:iphone7致命缺陷曝光
  18. java输入日期判断这天是周几
  19. 运维自动化之ANSIBLE
  20. 自己收藏的百度地图批量描点获取坐标工具类

热门文章

  1. Matlab点云处理及可视化第1期—基于KD树的邻域点搜索(柱状邻域、球状邻域及KNN)
  2. 【图像去噪】基于非局部均值(NLM)滤波图像去噪matlab源码
  3. [hdu6578]Blank
  4. bit digger
  5. android 软件备份工具,android备份软件 知乎 备份软件 知乎
  6. 【简介】流程化项目管理咨询师刘俊平介绍
  7. php是什么症状脾虚什么症状怎么治,脾虚可能会产生什么症状呢?该如何治疗?...
  8. Python SyntaxError: Missing parentheses in call to 'print'
  9. DoraCloud for Proxmox桌面云上启用NVIDIA Tesla P4的vGPU功能
  10. raid卡缓存对硬盘性能_1000倍可靠性,专为高端NAS而生 西部数据SA500 RED SSD固态硬盘首发评测...