九度OJ-1088剩下的树
2016-05-23 20:11
351 查看
题目地址 http://ac.jobdu.com/problem.php?pid=1088
//线段树 区间更新
#include <cstdio>
#include <algorithm>
using namespace std;
#define N 100010
int segtree[N*4+10];
int build_tree(int r ,int n){
if (n<1)
return 1;
segtree[r] = n;
// printf("r= %d , num = %d\n" ,r, n);
if (n==1)
return 1;
if (n%2==1){
build_tree(r*2,n/2+1);
}else{
build_tree(r*2,n/2);
}
build_tree(r*2+1,n/2);
}
int update_tree(int root , int l ,int r,int ll,int rr){
if (segtree[root]==0)
return 1;
if (l>rr || r<ll)
return 1;
if (ll<=l && rr>=r){
segtree[root] = 0 ;
}else{
int mid = (r+l)>>1;
update_tree(root*2,l,mid,ll,rr);
update_tree(root*2+1,mid+1,r,ll,rr);
segtree[root] = segtree[root*2]+segtree[root*2+1];
}
}
int main(){
int n,m;
while (~scanf("%d%d",&n,&m)){
build_tree(1,n+1);
int a,b;
for (int i = 0 ; i < m ; i ++)
{
scanf("%d%d",&a,&b);
update_tree(1,0,n,a,b);
}
printf("%d\n",segtree[1]);
}
}
//线段树 区间更新
#include <cstdio>
#include <algorithm>
using namespace std;
#define N 100010
int segtree[N*4+10];
int build_tree(int r ,int n){
if (n<1)
return 1;
segtree[r] = n;
// printf("r= %d , num = %d\n" ,r, n);
if (n==1)
return 1;
if (n%2==1){
build_tree(r*2,n/2+1);
}else{
build_tree(r*2,n/2);
}
build_tree(r*2+1,n/2);
}
int update_tree(int root , int l ,int r,int ll,int rr){
if (segtree[root]==0)
return 1;
if (l>rr || r<ll)
return 1;
if (ll<=l && rr>=r){
segtree[root] = 0 ;
}else{
int mid = (r+l)>>1;
update_tree(root*2,l,mid,ll,rr);
update_tree(root*2+1,mid+1,r,ll,rr);
segtree[root] = segtree[root*2]+segtree[root*2+1];
}
}
int main(){
int n,m;
while (~scanf("%d%d",&n,&m)){
build_tree(1,n+1);
int a,b;
for (int i = 0 ; i < m ; i ++)
{
scanf("%d%d",&a,&b);
update_tree(1,0,n,a,b);
}
printf("%d\n",segtree[1]);
}
}
相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)