HDU3577 线段树(区间更新)

HDU3577 线段树(区间更新)

  题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3577 ,普通的线段树区间更新题目,较简单。

 


 

  相当于一个区间覆盖问题,有一点要注意的就是叶子节点是一个长度为1的区间,而不是一个离散的点,两种叶子节点的具体区别我在这篇博客里提到过。

 

#include <iostream> #include <cstdio> #include <vector> #include <cmath> #include <string> #include <string.h> #include <algorithm>
using namespace std; #define LL __int64
#define eps 1e-8
#define INF INT_MAX
#define lson l , m , rt << 1
#define rson m , r , rt << 1 | 1
const int MOD = 10000007; const int maxn = 1000000 + 5; const int N = 100000 + 5; int cnt[maxn << 2] , col[maxn << 2]; int ans[N]; void build() { memset(cnt , 0 , sizeof(cnt)); memset(ans , 0 , sizeof(ans)); memset(col , 0 , sizeof(col)); } void PushUp(int rt) { cnt[rt] = max(cnt[rt << 1] , cnt[rt << 1 | 1]); } void PushDown(int rt) { if(col[rt]) { col[rt << 1] += col[rt]; col[rt << 1 | 1] += col[rt]; cnt[rt << 1] += col[rt]; cnt[rt << 1 | 1] += col[rt]; col[rt] = 0; } } void update(int L , int R , int l , int r , int rt) { if(L <= l && R >= r) { cnt[rt]++; col[rt]++; return; } PushDown(rt); int m = (l + r) >> 1; if(L >= m) update(L , R , rson); else if(R <= m) update(L , R , lson); else { update(L , R , lson); update(L , R , rson); } PushUp(rt); } bool query(int L , int R , int k , int l , int r , int rt) { if(L <= l && R >= r) { return cnt[rt] < k; } PushDown(rt); int m = (l + r) >> 1; if(L >= m) return query(L , R , k , rson); else if(R <= m) return query(L , R , k , lson); else
        return query(L , R , k , lson) && query(L , R , k , rson); } int main() { int T , i , n , m , k , a , b; cin >> T; for(int j = 1 ; j <= T ; j++) { build(); scanf("%d %d" , &k , &m); for(i = 1 ; i <= m ; i++) { scanf("%d %d" , &a , &b); if(query(a , b , k , 1 , maxn , 1)) { update(a , b , 1 , maxn , 1); ans[i]++; } } printf("Case %d:\n" , j); for(i = 1 ; i <= m ; i++) if(ans[i]) printf("%d " , i); printf("\n\n"); } return 0; }

 

提供几组测试数据:

4
3 6
1 6
1 6
3 4
1 5
1 2
2 4

3 10
2 4
4 6
6 8
2 8
1 8
1 2
1 10
2 9
3 7
9 10

3 10
4 5
5 6
6 7
7 8
9 10
1 4
1 10
2 9
4 6
3 8

3 8
4 6
6 8
9 10
1 4
1 10
2 9
4 6
3 8

Case 1:
1 2 3 5

Case 2:
1 2 3 4 5 6 10

Case 3:
1 2 3 4 5 6 7 8

Case 4:
1 2 3 4 5 6

 

转载于:https://www.cnblogs.com/H-Vking/p/4297275.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109543.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python 敏感词过滤的实现「建议收藏」

    Python 敏感词过滤的实现「建议收藏」一个简单的实现classNaiveFilter():”’FilterMessagesfromkeywordsverysimplefilterimplementation>>>f=NaiveFilter()>>>f.add(“sexy”)>>>f.filter(“…

    2022年6月1日
    33
  • JavaScript 保留两位小数的三种实现方法[通俗易懂]

    JavaScript 保留两位小数的三种实现方法[通俗易懂]1、利用toFixed()方法varnum=3.1415926;num=num.toFixed(2);console.log(num);//输出结果:3.142、利用Math.floor()方法varnum=3.1415926;num=Math.floor(num*100)/100;console.log(num);//输出结果:3.143、利用正则表达式方法varnum=3.1415926;num=Number(n.

    2022年8月10日
    4
  • c++二分法查找_二分法查找python代码

    c++二分法查找_二分法查找python代码二分法:二分法应用条件:1)数组为有序数组。2)同时题目还强调数组中无重复元素,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的。区间的定义:区间的定义不同代码就不同。1)定义target在[left,right]区间while(left<=right)要使用<=,因为left==right是有意义的,所以使用<=。if(nums[middle]>target)right要赋值为middle-1,因为当前这个nums[mid

    2022年10月31日
    0
  • 计算机网络vlan的作用,计算机网络之九:VLAN

    计算机网络vlan的作用,计算机网络之九:VLAN一:什么是VLAN广播在网络中起着非常重要的作用,如发现新设备,调整网络路径,IP地址租赁等,许多网络协议都要用到广播。然而,随着网络内计算机数量的增多,广播包的数量也会急剧增加,当广播包的数量占到通讯总量的30%时,网络的传输效率将会明显下降。所以当局域网内的计算机达到一定数量后,通常采用划分VLAN(虚拟局域网)的方式将网络分隔开来。将一个大的广播域划分为若干个小的广播域,以减小广播可能造成的…

    2022年8月10日
    3
  • 数据结构,计算机网络,数据库,计算机组成原理,操作系统有哪些好的网课值得推荐?[通俗易懂]

    大家好,我是小林哥。作为自学CS过来的老学长,看过中国mooc、b站、网易云课堂很多视频,期间踩了不少坑,这次掏心掏肺前来跟分享下,网上的资源是免费的,但是找到质量好的是需要时间成本的!数据结构,计算机网络,数据库,计算机组成原理,操作系统这些在大学期间一定要掌握好来,因为现在互联网大厂面试都爱考察这些内容,一句话,计算机基础,yyds!可能大家第一个问题是,这些课需要哪些先学?讲真,这些都是独立的课程,关联性不会大到说学这个课前要先学另外一个课,所以大家不要担心这个问题,它不是问题!可能大家也会

    2022年4月7日
    59
  • Autoconf简介「建议收藏」

    Autoconf简介「建议收藏」Autoconf是一个用于生成shell脚本的工具,可以自动配置软件源代码以适应多种类似POSIX的系统。为了让你的软件包在所有的不同系统上都可以进行编译。GNU构建系统Autoconf解决了系统特使构建和运行时信息的难题,但在软件开发时还有更多的难题,GNU构建系统是为了更好的开发软件而开发的一套完整的公益事业。主要组成部分有Autoconf、Automake和Libtool。Auto…

    2022年5月4日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号