5725: 小奇画画

时间限制: 1 Sec  内存限制: 128 MB
提交: 632  解决: 140
[提交] [状态] [讨论版] [命题人:admin]

题目描述

红莲清泪两行欲吐半点却无
如初是你杳然若绯雾还在水榭畔画楼处
是谁衣白衫如初谁红裳如故
——《忆红莲》
小奇想画几朵红莲,可惜它刚开始学画画,只能从画圆开始。小奇画了n个圆,它们的圆心都在x轴上,且两两不相交(可以相切)。现在小奇想知道,它画的圆把画纸分割成了多少块?(假设画纸无限大)

输入

第一行包括1个整数n。
接下来n行,每行两个整数x,r,表示小奇画了圆心在(x,0),半径为r的一个圆。

输出

输出一个整数表示答案。

样例输入

4
7 5
-9 11 11 9
0 20

样例输出

6

提示

对于 100%数据,1<=n<=300000,-10^9<=x<=10^9,1<=r<=10^9。

把圆切割出来的所有线段用点来代替,然后map一下,用线段树维护每个线段被覆盖的次数,更新的时候每次都+1,如果更新之前发现最小值为0,就是有的线段没有更新过,如果不为零,则所有线段都被圆覆盖过,区域被分成上下两个部分,所以要额外+1,就这样。

对了,好像是要用unordered_map不然会超时

#pragma GCC optimize(2)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <unordered_map>
#include <queue>
#include <algorithm>
#define ll long long
using namespace std;
int a[600005];
int c[600005*4];
int lazy[600005*4];
void pushup(int rt)
{c[rt]=min(c[rt*2],c[rt*2+1]);
}
void pushdown(int rt)
{if(lazy[rt]){c[rt*2]+=lazy[rt];c[rt*2+1]+=lazy[rt];lazy[rt*2]+=lazy[rt];lazy[rt*2+1]+=lazy[rt];lazy[rt]=0;pushup(rt);}
}
void update(int l,int r,int rt,int L,int R)
{if(L<=l&&r<=R){lazy[rt]++;c[rt]++;return;}pushdown(rt);int mid=(r+l)/2;if(L<=mid){update(l,mid,rt*2,L,R);}if(R>mid){update(mid+1,r,rt*2+1,L,R);}pushup(rt);
}
int query(int l,int r,int rt,int L,int R)
{if(L<=l&&r<=R){return c[rt];}pushdown(rt);int mid=(r+l)/2;int ans=99999999;if(L<=mid){ans=min(ans,query(l,mid,rt*2,L,R));}if(R>mid){ans=min(ans,query(mid+1,r,rt*2+1,L,R));}pushup(rt);return ans;
}
int n;
int ans;
typedef struct
{ll x,r;
}AC;
AC s[300005];
priority_queue<ll, vector<ll>, greater<ll> >q;
unordered_map<ll,int>mmp;
bool cmp(AC A,AC C)
{return A.r<C.r;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%lld %lld",&s[i].x,&s[i].r);q.push(s[i].x-s[i].r);q.push(s[i].x+s[i].r);}int tot=0;while(!q.empty()){if(mmp.count(q.top())==0){mmp[q.top()]=++tot;}q.pop();}sort(s+1,s+n+1,cmp);for(int i=1;i<=n;i++){//printf("query(%d %d)=%d\n",mmp[s[i].x-s[i].r],mmp[s[i].x+s[i].r],query(1,tot,1,mmp[s[i].x-s[i].r],mmp[s[i].x+s[i].r]));if(query(1,tot-1,1,mmp[s[i].x-s[i].r],mmp[s[i].x+s[i].r]-1)!=0){ans++;}update(1,tot-1,1,mmp[s[i].x-s[i].r],mmp[s[i].x+s[i].r]-1);ans++;}printf("%d\n",ans+1);return 0;
}

WA了七次,假装是水题

小奇画画(线段树+map)(水题)相关推荐

  1. 小清的线段树25题日志01 线段树下你和我 欢乐多又多

    前言 难度大致会按排序来 就不写总结啦 嘻嘻 适合刚学线段树的人(和我一样 练手 /*if you can't see the repayWhy not just work step by stepr ...

  2. 【bzoj3524】【Poi2014】【Couriers】可持久化线段树(主席树)水题

    [pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=62485671 向大(hei)佬(e)势力学(di ...

  3. 热身小游戏(线段树,单修区修区查)

    热身小游戏(线段树,单修区修区查) 链接:https://ac.nowcoder.com/acm/contest/37160/G 来源:牛客网 Alice 和 Bob 在玩热身小游戏,Alice 给出 ...

  4. 子段乘积(逆元费马小定理)+线段树做法

    题解:一开始做这个题的时候想过尺取法,但是因为没有逆元的知识,不知道该如何不断删除左端元素.其实这题并不难想,设l,r为两端开始都置为1,当长度小于k的时候不断乘右端元素并取余,当长度等于k时删除左端 ...

  5. 中石油训练赛 - 小A盗墓(线段树+异或结论)

    题目链接:点击查看 题目大意:给出n个数,以及m个操作,每个操作分为两种: 1 x y:将第x个数变为y 2 x y:判断闭区间[x,y]中的数能否在进行升序排序后构成一段连续且上升序列 题目分析:因 ...

  6. 吉首大学校赛B——干物妹小埋(线段树求最大递增子序列)

    链接:https://ac.nowcoder.com/acm/contest/992/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  7. 【洛谷 P2464】[SDOI2008]郁闷的小J(线段树)

    题目链接 这题我很久之前用分块写过,没写出来.. 今天又看到了,于是下决心把这题做出来. 这次我用线段树写的,直接对每本书的编号Hash一下然后离散化然后各建一棵线段树,维护当前编号在某个位置有没有书 ...

  8. [CQOI 2006]线段树之简单题

    Description 有一个n个元素的数组,每个元素初始均为0.有m条指令,要么让其中一段连续序列数字反转--0变1,1变0(操作1),要么询问某个元素的值(操作2).例如当n=20时,10条指令如 ...

  9. 2017西安交大ACM小学期数据结构 [线段树]

    Problem B+ 发布时间: 2017年7月1日 02:08   最后更新: 2017年7月1日 02:10   时间限制: 1000ms   内存限制: 64M 描述 给定一个长度为n的序列a1 ...

最新文章

  1. html里字号rem,html中的em和rem到底该如何使用,自适应效果中如何确定文字大小/字号?...
  2. Android 线程管理
  3. 200 ssl服务器证书无效_服务器证书无效网站显示异常怎么办?
  4. 保定 机器人焊接加工厂_满城招聘|双休+五险+国企保定乐凯设备制造安装有限公司招聘满城1.6招聘信息...
  5. python操作memcahed
  6. C# 篇基础知识10——多线程
  7. python调用库函数用ecb模式加密图片_AES中ECB模式的加密与解密(Python3.7)
  8. 盖茨透露自己曾犯下4000亿美元的错:给了安卓机会
  9. 用vim + xdebug 来追踪thinkphp的执行过程
  10. asp.net JSONHelper JSON帮助类
  11. oracle hibernate 自动创建表,自动创建表时,多了一张表hibernate_sequence,为什么?
  12. GBDT+LR算法解析及Python实现
  13. VS2013环境下GSL数学库的使用说明(亲测)
  14. 2022 年顶级网络安全专家最爱用的10大工具
  15. php调用pentaho,Pentaho数据源和查询
  16. 【LEDE】x86软路由之路-12-浅谈复杂网络环境中的AP优化
  17. 任务分配算法c语言程序,程序员算法基础——贪心算法
  18. thinkphp6教程笔记
  19. OpenCV-Python学习(9)—— OpenCV 通道的分离与合并(cv.split、cv.merge、cv.mixChannels、cv.inRange)
  20. Java数据库JDBC——prepareStatement的用法和解释

热门文章

  1. c语言实现翻页,css3实现翻页卡片
  2. 机器学习(周志华) 第十章降维与度量学习
  3. 分享一个前两天写的自动监控blocking 的脚本(基于12C)
  4. ife 2018 task5 三种简历
  5. android电视 优酷视频,将优酷视频投屏到智能电视上,竟然还有这种操作
  6. vue 中echarts的使用
  7. 内部总线、系统总线、外部总线
  8. win10系统笔记本电脑修改注册表设置自动锁屏时间的方法
  9. 在华清远见培训的感受(实习总结)
  10. WordCount单词计数详解