离散化后,[1,10]=[1,3]+[6,10]就丢了[4,5]这一段了。

因为更新[3,6]时,它只更新到[3,3],[6,6]。

要么在相差大于1的两点间加入一个值,要么就让左右端点为l,r的线段树节点表示到x[l]到x[r+1]的区间。

这样tree[l,r]=tree[l,m]+tree[m+1,r]=[x[l],x[m+1]]+[x[m+1],x[r+1]]

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstdio>
  4. #include<cstring>
  5. #define ll long long
  6. #define N 2005
  7. using namespace std;
  8. struct P{ll s,e,h,f;}p[N];
  9. struct Tree{ll sum,c;}t[N<<];
  10. int x[N],n,m,ans;
  11. int cmp(const P &a,const P &b){
  12. return a.h<b.h;
  13. }
  14. void init(){
  15. n=m=ans=;
  16. memset(p,,sizeof p);
  17. memset(t,,sizeof t);
  18. x[]=-;
  19. }
  20. void pushUp(ll rt,ll l,ll r){
  21. if(t[rt].c)t[rt].sum=x[r+]-x[l];
  22. else if(l==r)t[rt].sum=;
  23. else t[rt].sum=t[rt<<].sum+t[rt<<|].sum;
  24. }
  25. void update(ll s,ll e,ll rt,ll l,ll r,ll v){
  26. if(s<=l&&r<=e) t[rt].c+=v;
  27. else {
  28. if(l>e||r<s)return;
  29. ll m=l+r>>;
  30. update(s,e,rt<<,l,m,v);
  31. update(s,e,rt<<|,m+,r,v);
  32. }
  33. pushUp(rt,l,r);
  34. }
  35. int main()
  36. {
  37. int a,b,c,d;
  38. init();
  39. while(cin>>a>>b>>c>>d){
  40. if(a<)break;
  41. while(a>=){
  42. p[++n].s=a,p[n].e=c,p[n].h=b,p[n].f=;x[n]=a;
  43. p[++n].s=a,p[n].e=c,p[n].h=d,p[n].f=-;x[n]=c;
  44. cin>>a>>b>>c>>d;
  45. }
  46. sort(x+,x++n);
  47. for(int i=;i<=n;i++)
  48. if(x[i]!=x[i-])x[++m]=x[i];
  49.  
  50. sort(p+,p++n,cmp);
  51. for(int i=;i<n;i++){
  52. int l=lower_bound(x,x+m,p[i].s)-x;
  53. int r=lower_bound(x,x+m,p[i].e)-x-;
  54.  
  55. update(l,r,,,m,p[i].f);
  56. ans+=t[].sum*(p[i+].h-p[i].h);
  57. }
  58. cout<<ans<<endl;
  59. init();
  60. }
  61. return ;
  62. }
  63.   

【POJ 1389】Area of Simple Polygons(线段树+扫描线,矩形并面积)的更多相关文章

  1. POJ 1389 Area of Simple Polygons 扫描线+线段树面积并

    ---恢复内容开始--- LINK 题意:同POJ1151 思路: /** @Date : 2017-07-19 13:24:45 * @FileName: POJ 1389 线段树+扫描线+面积并 ...

  2. [poj] 1389 Area of Simple Polygons

    原题 线段树+扫描线 对于这样一个不规则图形,我们要求他的面积有两种方法,割和补. 补显然不行,因为补完你需要求补上去的内部分不规则图形面积-- 那么怎么割呢? 像这样: 我们就转化成了无数个矩形的和 ...

  3. POJ1389 Area of Simple Polygons 线段树

    POJ1389 给定n个整数点矩形,求面积并. 显然ans必然是整数. 记录若干个事件,每个矩形的左边的竖边记为开始,右边的竖边记为结束. 进行坐标离散化后用线段树维护每个竖的区间, 就可以快速积分了 ...

  4. POJ 1389 Area of Simple Polygons | 扫描线

    请戳此处 #include<cstdio> #include<algorithm> #include<cstring> #define N 1010 #define ...

  5. hdu 1828 Picture(线段树扫描线矩形周长并)

    线段树扫描线矩形周长并 #include <iostream> #include <cstdio> #include <algorithm> #include &l ...

  6. HDU 1264 Counting Squares (线段树-扫描线-矩形面积并)

    版权声明:欢迎关注我的博客.本文为博主[炒饭君]原创文章,未经博主同意不得转载 https://blog.csdn.net/a1061747415/article/details/25471349 P ...

  7. hdu1828 Picture(线段树+扫描线+矩形周长)

    看这篇博客前可以看一下扫描线求面积:线段树扫描线(一.Atlantis HDU - 1542(覆盖面积) 二.覆盖的面积 HDU - 1255(重叠两次的面积))  解法一·:两次扫描线 如图我们可以 ...

  8. poj 3277 City Horizon (线段树 扫描线 矩形面积并)

    题目链接 题意: 给一些矩形,给出长和高,其中长是用区间的形式给出的,有些区间有重叠,最后求所有矩形的面积. 分析: 给的区间的范围很大,所以需要离散化,还需要把y坐标去重,不过我试了一下不去重 也不 ...

  9. POJ 2482 Stars in Your Window 线段树扫描线

    Stars in Your Window   Description Fleeting time does not blur my memory of you. Can it really be 4 ...

  10. HDU 1542 Atlantis(线段树扫描线+离散化求面积的并)

    Atlantis Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

随机推荐

  1. 字典转换成NSString(NSJson)

    //字典转换成字符串 NSDictionary *dict = [NSMutableDictionary dictionary]; NSData *data = [NSJSONSerializatio ...

  2. shipyard安装

    1.Start an data volume instance of RethinkDB: # docker run -it -d --name shipyard-rethinkdb-data \ - ...

  3. Resting state brain networks derived from spatial ICA - an individual case

    Reference: Xin D, Biswal B B. Dynamic brain functional connectivity modulated by resting-state netwo ...

  4. Codevs 1860 最大数 string大法好,STL万岁。。

    题目描述 Description 设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数. 输入描述 Input Description 第一行一个正整数n. 第二行n个正整数,空格隔开 ...

  5. 微软职位内部推荐-SW Engineer II for Cloud Service

    微软近期Open的职位: Positions: SDE for Big Data Cloud Services Azure Big Data Cloud Services and Cosmos are ...

  6. 使Eclipse符合Java编程规范

    编程规范是很重要的东西,能让团队的代码易于阅读和维护,也便于日后的功能扩展. 工欲善其事必先利其器!作为一个Java程序员,与Eclipse打交道可能是一辈子的事情.将Eclipse设置为符合公司编程 ...

  7. Spring Security笔记:登录尝试次数限制

    今天在前面一节的基础之上,再增加一点新内容,默认情况下Spring Security不会对登录错误的尝试次数做限制,也就是说允许暴力尝试,这显然不够安全,下面的内容将带着大家一起学习如何限制登录尝试次 ...

  8. [MCSM]随机搜索和EM算法

    1. 概述 本节将介绍两类问题的不同解决方案.其一是通过随机的搜索算法对某一函数的取值进行比较,求取最大/最小值的过程:其二则和积分类似,是使得某一函数被最优化,这一部分内容的代表算法是EM算法.(书 ...

  9. Metatable让我从心认知了Lua(相知篇)

    自从在公司和Lua第一次相遇之后,我的IT生涯从此也开启了另一个新篇... 起初并没有和Lua产生相遇时的那种电石火花般的怦然心动...但... 说实话虽然我的心没有因此触动但至少也不排斥...因为公 ...

  10. 学堂在线 UWP 首版

    好久没有写博客了,主要是最近在写一个小小的App.<( ̄︶ ̄)> 不知道看各位有木有爱看慕课的,作为一名资深的大三学渣的我有看慕课的习惯.一直在看学堂在线的慕课,感觉质量确实还可以,但是遗 ...