本题题意:

给你n个圆,每个圆告诉你一个圆心和半径,圆心只能在x轴上,问你能把平面切割成几个部分,圆不可能相交。

思路就是把圆的左右区间先离散化一下, 判断一下区间是否被覆盖过,如果被覆盖过就+2,没有覆盖过就+1,最后算出的结果要加一。

AC代码:

/* ***********************************************
Author        :yzkAccepted
Created Time  :2016/3/28 19:35:45
TASK          :ggfly.cpp
LANG          :C++
************************************************ */#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <stack>
using namespace std;
typedef __int64 ll;
const int maxn=300001;
const int INF=1<<27;
ll ans=0;
int n;
int tree[maxn<<4],col[maxn<<4];
#define lson l , m , rt << 1
#define rson m + 1 , r , rt << 1 | 1
struct node{ll lif,rig;
}p[maxn];
ll l[maxn<<1];
bool cmp(node a,node b)
{if(a.rig==b.rig) return a.lif>b.lif;return a.rig<b.rig;
}
void pushup(int rt)
{tree[rt]=min(tree[rt<<1],tree[rt<<1|1]);
}
void build(int l,int r, int rt)
{col[rt]=0;tree[rt]=0;if(l==r)return;int m=l+r>>1;build(lson);build(rson);
}
void pushdown(int rt)
{if(col[rt]){col[rt<<1]=col[rt<<1|1]=col[rt];tree[rt<<1]=1;tree[rt<<1|1]=1;col[rt]=0;}
}
void update(int L,int R,int l,int r,int rt) {  if (L <= l && r <= R) {  col[rt] = 1;  tree[rt] = 1;return ;  }  pushdown(rt );  int m = (l + r) >> 1;  if (L <= m) update(L , R , lson);  if (R > m) update(L , R  , rson);pushup(rt);
}
int query(int L,int R,int l,int r,int rt)
{if(tree[rt]==1)return 1;if(L<=l && r<=R){    return tree[rt];}int m=(l+r)>>1;int ret=INF;if(L<=m)ret=min(ret,query(L,R,lson));if(R>m)ret=min(ret,query(L,R,rson));return ret;
}
int main()
{//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);int i,tot,j;ll x,r;scanf("%d",&n);tot=0;for(i=0;i<n;i++){scanf("%I64d%I64d",&x,&r);p[i].lif=x-r;l[tot]=p[i].lif;tot++;p[i].rig=x+r;l[tot]=p[i].rig;tot++;}sort(l,l+tot);for(i=0;i<n;i++){ p[i].lif=(lower_bound(l,l+tot,p[i].lif)-l+1)*2;p[i].rig=(lower_bound(l,l+tot,p[i].rig)-l+1)*2;}sort(p,p+n,cmp);build(1,n*4,1);for(i=0;i<n;i++){if(query(p[i].lif,p[i].rig,1,n*4,1)==1){  ans+=2;}else{ans++;update(p[i].lif,p[i].rig,1,4*n,1);}}printf("%I64d\n",ans+1);return 0;
}

zjnu 1779 KRUŽNICE(线段树成段更新+离散化)相关推荐

  1. uscao 线段树成段更新操作及Lazy思想(POJ3468解题报告)

    线段树成段更新操作及Lazy思想(POJ3468解题报告) 标签: treequerybuildn2cstruct 2011-11-03 20:37 5756人阅读 评论(0) 收藏 举报  分类: ...

  2. HDOJ 1698 Just a Hook(线段树成段更新)

    题意: 屠夫的钩子区间是1~n,每段可能由铜,银,金组成,价值分别为1,2,3,进行一系列的更新之后,求钩子的总价值. 思路: 线段树的成段更新:要设置一个临时的线段树,每次更新的时候把更新段的值放在 ...

  3. HDU 3974 Assign the task(dfs时间戳+线段树成段更新)

    题意:给定点的上下级关系,规定假设给i分配任务a.那么他的全部下属.都停下手上的工作,開始做a. 操作 T x y 分配x任务y,C x询问x的当前任务: Sample Input 1 5 4 3 3 ...

  4. Wikioi 1081 线段树成段更新单点查询

    线段树练习飘逸的写法,自从自己改成这样的写法之后,线段树就没再练过,如今最终练得上了. 由于这里查询仅仅是查询了叶子结点,所以pushUp函数就用不上了,只是我没去掉之前是3ms.去掉之后反而变成4m ...

  5. UVA 12501 Bulky process of bulk reduction ——(线段树成段更新)

    和普通的线段树不同的是,查询x~y的话,给出的答案是第一个值的一倍加上第二个值的两倍一直到第n个值的n倍. 思路的话,就是关于query和pushup的方法.用一个新的变量sum记录一下这个区间里面按 ...

  6. HDU 6203 ping ping ping lca 线段树成段更新

    题目链接:HDU 6203 ping ping ping Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  7. POJ3468 A Simple Problem with Integers【线段树 成段更新+求和 lazy标志】

    用longlong替换__int64也成. #define LL long long 输入输出用%lld Problem: 3468   User: qq1203456195 Memory: 4284 ...

  8. HDU 3397 Sequence operation 线段树 成段更新 区间合并

    比较综合的题. 两个标记  setv,xorr.setv的优先级高于xorr,当一个节点获得一个setv时,他之前的xorr要清除. //#pragma comment(linker, "/ ...

  9. hdu 1698 线段树成段更新

    这么重要的数据结构还是得学啊.仿notonlysuccess的代码风格 #include <cstdio> #include <algorithm> #include < ...

  10. UESTC-1057 秋实大哥与花(线段树+成段加减+区间求和)

    秋实大哥与花 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit St ...

最新文章

  1. 【原】python3.7 无法pip安装提示ssl错误解决方案
  2. 如何“主动出击”提升网站的收录速度?
  3. 在java中重写方法应遵循规则的包括_Java面试题集合篇二
  4. tar 压缩去除目录
  5. var result = ![] == []; console.log(result); // 结果是?为什么?
  6. 最受欢迎的Java环境
  7. oracle em中查看jiob,HTML5 中的 b/strong、i/em 详解
  8. java函数只有参数类不一样_java的函数参数传递
  9. Linux内核分析 - 网络[十二]:UDP模块 - 收发
  10. light oj -1245 - Harmonic Number (II)
  11. 云市场合作伙伴-袋鼠云获A轮融资,成立一年半获三轮投资超亿元
  12. android 布局覆盖 超出一部分_Android 开发者峰会 2019 常见问题解答
  13. 韩顺平图解Java设计模式
  14. TIA博途中如何将CPU导出为GSD文件与其他PLC进行PROFINET通信?
  15. 【电子学会】2019年12月图形化四级 -- 随机选T恤
  16. 用记事本编辑注册表文件
  17. android wifi取消自动连接网络,Android 11新增无线网络连接安全策略 可以不自动连接某些特定WiFi...
  18. STM32实战总结:HAL之FSMC控制TFT-LCD
  19. 使用hutool生成excel遇到的问题:
  20. 软件测试性能工程师工资,软件测试工程师工资一般多少 前景怎么样

热门文章

  1. 成功的客户关系项目管理实施案例的共同特点
  2. 美国国立卫生研究院利用AI自动检测肺部异常,突破数据收集瓶颈
  3. 给硬件工程师的入门课-系统框图的设计
  4. 解决linux下svn update 产生Node remains in conflict的问题
  5. 孵出鸡蛋然后拿去卖钱
  6. 【论文学习:基于EEG/EMG/EOG的多模态人机接口,用于实时控制软机器人手】
  7. 双硬盘双win10互不干扰_win10系统安装双硬盘却无法显示另一个硬盘的修复方案...
  8. fastadmin 后台新增和编辑成功后刷新整个页面
  9. 自动注册gmail邮箱构想
  10. 小程序分销的规则是怎样的?