离散化 + 树状数组。

  这些东西自己都是刚接触不久的,所以需要多写点题练练手。


  

  

题目描述:

  一维坐标中有N条线段,其中有一个点上面覆盖的线段数是最多的,求该点上面的线段数目。

  这道题和HDU1556特别相似,不过这道题数据的值比较大,所以要离散化预处理一下数据。

  个人常用的离散化方法:先预存一下数据,然后用数组tmp[]存一下数据,对tmp[]数组排序,然后二分查找原数据在tmp[]数组中的下标,并且把下标作为离散化的数据。有一点比较方便的是,不需要去重。

  然后就是树状数组这部分,一维树状数组支持两种操作: 1. 单点更新,区间求和 ; 2 . 区间更新,单点求值。这两种操作的更新和求和这部分是反过来的,前者是对上更新,对下求值,后者是对下更新,对上求值。所以说树状数组比较好实现也容易推广到多维,但是功能不如线段树。

算法:

  用树状数组来存每个点的覆盖次数,覆盖一次即视为该点的数值+1;由于更新的时候是区间更新,所以对[a , b]这个区间覆盖的话,先把[1 , a-1]区间更新-1,然后把[1,b]区间更新+1,所以求最后所有点的最大值即可。

  1. #include <iostream>
  2. #include <iomanip>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <algorithm>
  6. #include <functional>
  7. #include <vector>
  8. #include <cmath>
  9. #include <string>
  10. #include <stack>
  11. #include <queue>
  12. using namespace std;
  13. const int maxn = 1 + ;
  14. int c[maxn] , n , k;
  15. int L[maxn][] , tmp[maxn];
  16. int lowbit(int x)
  17. {
  18. return x & (-x);
  19. }
  20. void update(int x , int num)
  21. {
  22. while(x > ) {
  23. c[x] += num;
  24. x -= lowbit(x);
  25. }
  26. }
  27. int getsum(int i)
  28. {
  29. int res = ;
  30. while(i <= k) {
  31. res += c[i];
  32. i += lowbit(i);
  33. }
  34. return res;
  35. }
  36. int binary_Search(int a[] , int l , int r , int x)
  37. {
  38. int m = (l + r) >> ;
  39. while(l <= r) {
  40. if(a[m] == x)
  41. return m;
  42. if(a[m] < x)
  43. l = m + ;
  44. if(a[m] > x)
  45. r = m;
  46. m = (l + r) >> ;
  47. }
  48. return -;
  49. }
  50. int main()
  51. {
  52. int T , i , j;
  53. scanf("%d",&T);
  54. while(T--)
  55. {
  56. scanf("%d",&n);
  57. memset(c , , sizeof(c));
  58. for(i = , k = ; i <= n ; i++) {
  59. scanf("%d %d" , &L[i][] , &L[i][]);
  60. tmp[++k] = L[i][];
  61. tmp[++k] = L[i][];
  62. }
  63. sort(tmp + , tmp + k +);
  64. for(i = ; i <= n ; i++) {
  65. for(j = ; j <= ; j++) {
  66. int pos = binary_Search(tmp , , k , L[i][j]);
  67. L[i][j] = pos;
  68. }
  69. }
  70. for(i = ; i <= n ; i++) {
  71. update(L[i][] - , -);
  72. update(L[i][] , );
  73. }
  74. int max = ;
  75. for(i = ; i <= k ; i++) {
  76. if(getsum(max) < getsum(i))
  77. max = i;
  78. }
  79. printf("%d\n",getsum(max));
  80. }
  81. return ;
  82. }

  

  

HDU5124 lines的更多相关文章

  1. HDU5124:lines(线段树+离散化)或(离散化思想)

    http://acm.hdu.edu.cn/showproblem.php?pid=5124 Problem Description John has several lines. The lines ...

  2. extracting lines bases a list using awk

    extracting lines bases a list using awk awk 'NR==FNR{a[$1]=$0; next}($1 in a){print a[$1]"\n&qu ...

  3. Enum:Game of Lines(POJ 3668)

    画直线 题目大意:给定一些点集,要你找两点之间的连线不平行的有多少条 数据量比较少,直接暴力枚举,然后放到set查找即可 #include <iostream> #include < ...

  4. 我的常用mixin 之 lines

    /** * 最多显示 $lineCount 行 * lines * * example: * @include lines; * @include lines(3); */ @mixin lines( ...

  5. uva 1471 defence lines——yhx

    After the last war devastated your country, you - as the king of the land of Ardenia - decided it wa ...

  6. POJ 1269 Intersecting Lines --计算几何

    题意: 二维平面,给两条线段,判断形成的直线是否重合,或是相交于一点,或是不相交. 解法: 简单几何. 重合: 叉积为0,且一条线段的一个端点到另一条直线的距离为0 不相交: 不满足重合的情况下叉积为 ...

  7. POJ 1269 Intersecting Lines【判断直线相交】

    题意:给两条直线,判断相交,重合或者平行 思路:判断重合可以用叉积,平行用斜率,其他情况即为相交. 求交点: 这里也用到叉积的原理.假设交点为p0(x0,y0).则有: (p1-p0)X(p2-p0) ...

  8. [CareerCup] 13.1 Print Last K Lines 打印最后K行

    13.1 Write a method to print the last K lines of an input file using C++. 这道题让我们用C++来打印一个输入文本的最后K行,最 ...

  9. Codeforces 593B Anton and Lines

    LINK time limit per test 1 second memory limit per test 256 megabytes input standard input output st ...

随机推荐

  1. Android运行时Crash自动恢复框架-Recovery

    转自:http://zhengxiaoyong.me/2016/09/05/Android%E8%BF%90%E8%A1%8C%E6%97%B6Crash%E8%87%AA%E5%8A%A8%E6%8 ...

  2. sql各种查询技巧

    SQL Server T-SQL高级查询 高级查询在数据库中用得是最频繁的,也是应用最广泛的. Ø 基本常用查询 --select select * from student; --all 查询所有 ...

  3. SCUT - 223 - Maya - 构造

    https://scut.online/p/223 给定两个数N,M,构造M个在[0,80000]以内的互不相同的数使之异或和为N. 首先特判一下M<=2的两个简单情况,还有坑爹的-1! 然后想 ...

  4. java学习笔记——基于Robot类的屏幕分享

    直接上代码,具体看注释: package robot; import java.awt.AWTException; import java.awt.Dimension; import java.awt ...

  5. 51nod1035(循环节)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1035 题意:中文题诶- 思路:求满足 10^k=1(mod ...

  6. 洛谷P2798 爆弹虐场

    P2798 爆弹虐场 题目描述 某年某月某日,Kiana 结识了一名爆弹虐场的少年. Kiana 仗着自己多学了几年OI,所以还可以勉勉强强给这位少年 讲一些自己擅长的题.具体来说,Kiana 先给这 ...

  7. django的models字段介绍

    #增加数据库数据方法#方法1CalcData.objects.create(var1 ='21',var2='22')#方法2obj =CalcData(var1 ='21',var2='22')jo ...

  8. flask数据操纵

    Flask ORM 在Django框架中内部已经提供ORM这样的框架,来实现对象关系映射,方便我们操作数据库.如果想在Flask中也达到这样效果,需要安装一个第三方来支持. SQLAlchemy是一个 ...

  9. npm install 权限问题

    npm ERR! Error: EACCES: permission denied, access '/Users/Lobin/work/note-vue/node_modules/@babel/hi ...

  10. 简单的PHP+Mysql实现分页

    <?php /** * PHP+Mysql实现分页 * **/ ?> <html> <head> <meta http-equiv="Content ...