题目链接: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 = ;
const int maxn = + ;
const int N = + ;
int cnt[maxn << ] , col[maxn << ];
int ans[N];
void build()
{
memset(cnt , , sizeof(cnt));
memset(ans , , sizeof(ans));
memset(col , , sizeof(col));
}
void PushUp(int rt)
{
cnt[rt] = max(cnt[rt << ] , cnt[rt << | ]);
}
void PushDown(int rt)
{
if(col[rt]) {
col[rt << ] += col[rt];
col[rt << | ] += col[rt];
cnt[rt << ] += col[rt];
cnt[rt << | ] += col[rt];
col[rt] = ;
}
}
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) >> ;
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) >> ;
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 = ; j <= T ; j++)
{
build();
scanf("%d %d" , &k , &m);
for(i = ; i <= m ; i++) {
scanf("%d %d" , &a , &b);
if(query(a , b , k , , maxn , )) {
update(a , b , , maxn , );
ans[i]++;
}
}
printf("Case %d:\n" , j);
for(i = ; i <= m ; i++)
if(ans[i])
printf("%d " , i);
printf("\n\n");
}
return ;
}

提供几组测试数据:

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

最新文章

  1. HashMap实现缓存
  2. Centos下安装Redis
  3. Codeforces 727 D T-shirts Distribution
  4. 通过UIView获取UIViewController
  5. 【原创分享】python获取乌云最新提交的漏洞,邮件发送
  6. centos7安装mysql
  7. CSS溢出文本省略(text-overflow)
  8. uiatuomator提示shortMsg=java.lang.RuntimeException
  9. ffmpeg之YUYV转RGB ARM使用流程分析
  10. Linux设置自启动
  11. [ An Ac a Day ^_^ ] CodeForces 691F Couple Cover 花式暴力
  12. EL表达式,保留小数点后两位
  13. ps--记录几个方法步骤
  14. Python高级笔记(二) -- 深拷贝和浅拷贝
  15. The Oregon Trail 俄勒冈之旅
  16. ___简单的MVC单个图片上传预览
  17. html input 文本框 只能输入数字,包含输小数点.
  18. java之Spring集成CXF简单调用
  19. Python3练习题系列(03)
  20. 在使用Idea配置jQuery的问题

热门文章

  1. 机器学习十大算法之EM算法
  2. GTK+学习笔记(一)
  3. Linux系列教程-----Linux安装centos6.8
  4. python之02数据类型学习-作业练习2
  5. FJOI2019全记录(福建省选)
  6. JIRA reference
  7. AT2301 Solitaire
  8. 从select机制谈到epoll机制
  9. KVM虚拟机CPU绑定性能调优(宿主机上操作)
  10. urllib2.URLError: &lt;urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)&gt;