hdu--5124--5125-bc

这2题放一起吧 反正都是同一场的.

B题 虽然是被自己想复杂了 用了树状数组。。

当时自己还没离散化出来 还是用了超神的离散化 ‘

不知道自己的哪边错了 ffffffk

<区间更新  单点查询>

 1 #include <iostream>
 2 #include <cstring>
 3 #include <algorithm>
 4 using namespace std;
 5
 6 int res;
 7 const int size = 100010*3;
 8 struct data
 9 {
10     int L;
11     int R;
12 }node[size];
13 int lisan[size] , a[size] , tree[size];
14
15 int lowBit( int x )
16 {
17     return x & -x;
18 }
19
20 void update( int index , int var )
21 {
22     while( index<=res )
23     {
24         tree[index] += var;
25         index += lowBit( index );
26     }
27 }
28
29 int getSum( int index )
30 {
31     int sum = 0;
32     while( index )
33     {
34         sum += tree[index];
35         index -=lowBit( index );
36     }
37     return sum;
38 }
39
40 int main()
41 {
42     cin.sync_with_stdio(false);
43     int t , n , ans , cnt;
44     cin >> t;
45     while( t-- )
46     {
47         cin >> n;
48         memset( tree , 0 , sizeof(tree) );
49         res = cnt = 1;
50         for( int i = 1 ; i<=n ; i++ )
51         {
52             cin >> node[i].L >> node[i].R;
53             a[cnt++] = node[i].L;
54             a[cnt++] = node[i].R;
55         }
56         sort( a+1 , a+cnt );
57         for( int i = 1 ; i<cnt ; i++ )
58         {
59             if (i == 1)
60             {
61                 lisan[a[i]] = ++res;
62             }
63             else if (a[i] == a[i - 1])
64             {
65                 lisan[a[i]] = lisan[a[i - 1]];
66             }
67             else
68             {
69                 lisan[a[i]] = ++res;
70             }
71         }
72         for( int i = 1 ; i<=n ; i++ )
73         {
74             update(  lisan[ node[i].L ] , 1 );
75             update( lisan[ node[i].R ]+1 , -1 );
76         }
77         ans = 0;
78         for( int i = 1 ; i<=cnt ; i++ )
79         {
80             ans = max( ans , getSum(i) );
81         }
82         cout << ans << endl;
83     }
84     return 0;
85 }

另外一个dp还没出  明天再想吧 累。。。

时间: 2024-12-17 11:00:40

hdu--5124--5125-bc的相关文章

HDU 4883 (BC#2 1001题)TIANKENG’s restaurant(水)

题目地址:HDU 4883 唉..最近得了一种惯性..刚学了什么就碰到个类似的就想用刚学的算法...原来这题如此简单..当时真是想多了.... 只要在需要变化的点上设置一个值,是增多少还是减多少.然后当遍历过来的时候加上或减去这个值就行了... 代码如下: #include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h>

【扫描线】HDU 5124 lines

http://acm.hdu.edu.cn/showproblem.php?pid=5124 [题意] 在数轴x上,每次操作都覆盖一个区间的所有点,问被覆盖次数最多的点是覆盖了多少次 [思路] 最简单的扫描线,左右端点分别排序,遇到左端点sum++更新最值,遇到右端点sun--更新最值 [Accepted] 1 #include<bits/stdc++.h> 2 using namespace std; 3 int a[100010],b[100010]; 4 int t,n; 5 bool

BestCoder20 1002.lines (hdu 5124) 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5124 题目意思:给出 n 条线段,每条线段用两个整数描述,对于第 i 条线段:xi,yi 表示该条线段的左端点和右端点.设 A 表示最多线段覆盖的点(当然这个 A 可以有多个啦,但这个无关紧要).现在需要求的是 A 被多少条线段覆盖. 我是不会做啦.......一开始还看不懂题目= = 以下是按照题解做的, 题解中的最大区间和,实际上就是求最大连续子序列的和. 1 #include <iostrea

HDU 5124 lines

lines Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 515    Accepted Submission(s): 241 Problem Description John has several lines. The lines are covered on the X axis. Let A is a point which i

hdu 5671 Matrix(BC——思维题)

题目链接:acm.hdu.edu.cn/showproblem.php?pid=5671 Matrix Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 891    Accepted Submission(s): 371 Problem Description There is a matrix M that has n rows

HDU 5124 lines(BestCoder Round #20)

Problem Description: John has several lines. The lines are covered on the X axis. Let A is a point which is covered by the most lines. John wants to know how many lines cover A. Input: The first line contains a single integer T(1≤T≤100)(the data for 

hdu 5124 lines (线段树+离散化)

lines Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 620    Accepted Submission(s): 288 Problem Description John has several lines. The lines are covered on the X axis. Let A is a point which

HDU 5124

题意:给定 n 个区间,问最多重复的子区间? 题解:(离散化思想)讲所有的数都排个序,将区间的左值定为 1 ,右值定为 -1 ,这样对所有的数搜一遍过去找最大的值即可 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #include <time.h> 6 #include <ctype.h> 7 #includ

[思路题] hdu 5124 lines

题意: 给n个区间 [x,y],问被最多覆盖的点,被覆盖了多少次. 思路: 一个很巧妙的方法.好像原来有接触过. 就是如果给你[1,3]就used[1]++,used[4]--. 然后从左到又过一遍出现的点 依次累加每次加的时候取最大值. 然后这题需要用到map离散化. 代码: #include"cstdlib" #include"cstdio" #include"cstring" #include"cmath" #inclu

hdu 5124 lines(Bestcoder Round #20)

lines                                                                Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 309    Accepted Submission(s): 145 Problem Description John has several line