【tyvj1473】校门外的树3
来源:互联网 发布:幕墙下料软件 编辑:程序博客网 时间:2024/05/22 10:54
题目:我是超链接
题解:
每次添加一个线段,求在一个区间内能看到多少条线段。我们考虑一下什么样的线段看不见------终点在x以前的,起点在y以后的......
我们只需要用总数-看不到的数量就是ans,那么只需要记录每个点起点和终点的位置就ok-------单点修改,区间查询
注意好好考虑边界,如果x-1=0那么就是左边不用搜了,反正不会有看不到的线段。。。
代码:
#include <cstdio>#define N 200005using namespace std;int ll[N],rr[N],n,m,sum;void updata(int now,int l,int r,int x,int id){if (l==r) {if (id==1) ll[now]++;else rr[now]++;return;}int mid=(l+r)>>1;if (x<=mid) updata(now<<1,l,mid,x,id);else updata(now<<1|1,mid+1,r,x,id);if (id==1) ll[now]=ll[now<<1]+ll[now<<1|1];else rr[now]=rr[now<<1]+rr[now<<1|1];}int qurry(int now,int l,int r,int lrange,int rrange){if (lrange>rrange) return 0;if (lrange<=l && rrange>=r) return rr[now];int mid=(l+r)>>1,ans=0;if (lrange<=mid) ans+=qurry(now<<1,l,mid,lrange,rrange);if (rrange>mid) ans+=qurry(now<<1|1,mid+1,r,lrange,rrange);return ans;}int qurry2(int now,int l,int r,int lrange,int rrange){if (lrange>rrange) return 0;if (lrange<=l && rrange>=r) return ll[now];int mid=(l+r)>>1,ans=0;if (lrange<=mid) ans+=qurry2(now<<1,l,mid,lrange,rrange);if (rrange>mid) ans+=qurry2(now<<1|1,mid+1,r,lrange,rrange);return ans;}int main(){int i;scanf("%d%d",&n,&m);for (i=1;i<=m;i++) {int id,x,y;scanf("%d%d%d",&id,&x,&y);if (id==1){sum++;updata(1,1,n,x,1);updata(1,1,n,y,2);}else printf("%d\n",sum-qurry(1,1,n,1,x-1)-qurry2(1,1,n,y+1,n));} }
阅读全文
0 0
- 【tyvj1473】校门外的树3
- 【tyvj1473】校门外的树3
- 【tyvj1473】校门外的树3
- [tyvj1473]校门外的树3
- 【tyvj1473】校门外的树3
- 校门外的树3
- 校门外的树
- 校门外的树
- 校门外的树
- 校门外的树
- 校门外的树
- 校门外的树
- 校门外的树
- 校门外的树
- 校门外的树
- 校门外的树
- 校门外的树
- 校门外的树!
- 运行时修改内存中的Dalvik指令来改变代码逻辑
- 图片中添加点击事件后没有反应的问题分析
- Unity3D_touch事件和点击事件
- SCUT Training 20170913 Problem N
- ASP.NET HttpRuntime.Cache缓存类使用总结
- 【tyvj1473】校门外的树3
- C++学习笔记---类的继承(二)
- 读取properties文件
- quartz与timer
- ubuntu wpasupplicant 连接无线网
- 用phpstudy正确配置阿里服务器 网站就是不能浏览原因
- 怎么解决电脑频繁死机?
- 工作新的开始
- 关于微信wx.previewImage图片没有正常显示的问题