debug 快要绝望–发现operator 里面竟然连return 都没有 —QAQ


标1 处都是不合理的位置 --也就是原有家具(包括边界)向左(向上)移动m-1的范围
题目就转化为求两种情况 面积剩下的标黄部分的面积了
m =1不考虑竖放的情况 因为横竖放置一样,再考虑就重复 了

LINK

#include<bits/stdc++.h>
using namespace std;
const int N=200010;
typedef long long ll;
ll x[N],xx,sum[N<<3];
int cnt[N<<3],n;ll w,h,m;
struct node
{int l,r,h,v;node(){}node(int x,int y,int z,int v ):l(x),r(y),h(z),v(v){}bool operator <(const node &x) const {return h<x.h;}}seg[N];
int date[N][4];
void up(int rt,int l,int r)
{if(cnt[rt]){sum[rt]=x[r+1]-x[l];}else if(l==r) {sum[rt]=0;}else sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}
void update(int rt,int l,int r,int L,int R,int v)
{if(l>=L&&r<=R){cnt[rt]+=v;up(rt,l,r);return ;}int mid=(l+r)>>1;if(L<=mid) update(rt<<1,l,mid,L,R,v);if(R>mid) update(rt<<1|1,mid+1,r,L,R,v);up(rt,l,r);
}
ll deal()
{ll ans=0;int xx=0;int p=0;seg[p++]=node(1,w,max(h-(m-1),1ll),1);seg[p++]=node(1,w,h,-1);memset(cnt,0,sizeof(cnt));memset(sum,0,sizeof(sum));x[xx++]=1;x[xx++]=w;for(int i=1;i<=n;i++){int x1=date[i][0],x2=date[i][2],y1=date[i][1],y2=date[i][3];y1=max(1ll,y1-(m-1));seg[p++]=node(x1,x2,y1,1);seg[p++]=node(x1,x2,y2,-1);x[xx++]=x1 ;x[xx++]=x2;}sort(x,x+xx);xx=unique(x,x+xx)-x;sort(seg,seg+p);/*for(int i=0;i<p;i++){cout<<seg[i].h <<"p"<<p<<endl; } */for(int i=0;i<p-1;i++){int l=lower_bound(x,x+xx,seg[i].l )-x;int r=lower_bound(x,x+xx,seg[i].r )-x-1;if(l<=r) update(1,0,xx-1,l,r,seg[i].v );ans+= sum[1]*(seg[i+1].h -seg[i].h );}return ans;
}
int main()
{scanf("%lld%lld%d%lld",&w,&h,&n,&m);for(int i=1;i<=n;i++){int a,b,c,d;scanf("%d%d%d%d",&a,&b,&c,&d);c++;d++; date[i][0]=a;date[i][1]=b;date[i][2]=c;date[i][3]=d;}w++;h++;ll ans=(w-1)*(h-1)-deal();//cout<<ans<<endl;if(m==1){printf("%lld\n",ans);}else{swap(w,h);for(int i=1;i<=n;i++){swap(date[i][0],date[i][1]);swap(date[i][2],date[i][3]);}ans+=(w-1)*(h-1)-deal();printf("%lld\n",ans);}
}
#include<bits/stdc++.h>
using namespace std;
const int N=200010;
typedef long long ll;
ll x[N],xx,sum[N<<3];
int cnt[N<<3],n;ll w,h,m;
struct node
{int l,r,h,v;node(){}node(int x,int y,int z,int v ):l(x),r(y),h(z),v(v){}bool operator <(const node &x) const {return h<x.h;}}seg[N];
int date[N][4];
void up(int rt,int l,int r)
{if(cnt[rt]){sum[rt]=x[r+1]-x[l];}else if(l==r) {sum[rt]=0;}else sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}
void update(int rt,int l,int r,int L,int R,int v)
{if(l>=L&&r<=R){cnt[rt]+=v;up(rt,l,r);return ;}int mid=(l+r)>>1;if(L<=mid) update(rt<<1,l,mid,L,R,v);if(R>mid) update(rt<<1|1,mid+1,r,L,R,v);up(rt,l,r);
}
ll deal()
{ll ans=0;int xx=0;int p=0;seg[p++]=node(max(w-m+1,1ll),w,1,1);seg[p++]=node(max(w-m+1,1ll),w,h,-1);memset(cnt,0,sizeof(cnt));memset(sum,0,sizeof(sum));x[xx++]=max(w-m+1,1ll);x[xx++]=w;for(int i=1;i<=n;i++){int x1=date[i][0],x2=date[i][2],y1=date[i][1],y2=date[i][3];x1=max(1ll,x1-(m-1));seg[p++]=node(x1,x2,y1,1);seg[p++]=node(x1,x2,y2,-1);x[xx++]=x1 ;x[xx++]=x2;}sort(x,x+xx);xx=unique(x,x+xx)-x;sort(seg,seg+p);for(int i=0;i<p-1;i++){int l=lower_bound(x,x+xx,seg[i].l )-x;int r=lower_bound(x,x+xx,seg[i].r )-x-1;if(l<=r) update(1,0,xx-1,l,r,seg[i].v );ans+= sum[1]*(seg[i+1].h -seg[i].h );}return ans;
}
int main()
{scanf("%lld%lld%d%lld",&w,&h,&n,&m);for(int i=1;i<=n;i++){int a,b,c,d;scanf("%d%d%d%d",&a,&b,&c,&d);c++;d++; date[i][0]=a;date[i][1]=b;date[i][2]=c;date[i][3]=d;}w++;h++;ll ans=(w-1)*(h-1)-deal();if(m==1){printf("%lld\n",ans);}else{swap(w,h);for(int i=1;i<=n;i++){swap(date[i][0],date[i][1]);swap(date[i][2],date[i][3]);}ans+=(w-1)*(h-1)-deal();printf("%lld\n",ans);}
}

秋实大哥与家 线段树+扫描线相关推荐

  1. UESToj 1057 秋实大哥与花 ( 线段树

    秋实大哥与花 Description 秋实大哥是一个儒雅之人,昼听笙歌夜醉眠,若非月下即花前. 所以秋实大哥精心照料了很多花朵.现在所有的花朵排成了一行,每朵花有一个愉悦值. 秋实大哥每天要对着某一段 ...

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

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

  3. 2015 UESTC 数据结构专题A题 秋实大哥与小朋友 线段树 区间更新,单点查询,离散化...

    秋实大哥与小朋友 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 Desc ...

  4. UESTC - 1057 秋实大哥与花 线段树

    题意 秋实大哥是一个儒雅之人,昼听笙歌夜醉眠,若非月下即花前. 所以秋实大哥精心照料了很多花朵.现在所有的花朵排成了一行,每朵花有一个愉悦值. 秋实大哥每天要对着某一段连续的花朵歌唱,然后这些花朵的愉 ...

  5. UESTC - 1057 秋实大哥与花 线段树模板题

    http://acm.uestc.edu.cn/#/problem/show/1057 题意:给你n个数,q次操作,每次在l,r上加上x并输出此区间的sum 题解:线段树模板, #define _CR ...

  6. uestc 1073 秋实大哥与线段树 Label:线段树

    秋实大哥与线段树 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) "学 ...

  7. CDOJ-1057 秋实大哥与花(线段树区间更新)

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

  8. 2015 UESTC 数据结构专题D题 秋实大哥与战争 变化版本的线段树,合并区间,单点查询...

    D - 秋实大哥与战争 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 D ...

  9. 秋实大哥与线段树 UESTC - 1073

    秋实大哥与线段树 UESTC - 1073 Problem "学习本无底,前进莫徬徨." 秋实大哥对一旁玩手机的学弟说道. 秋实大哥是一个爱学习的人,今天他刚刚学习了线段树这个数据 ...

最新文章

  1. 【转】堆栈和托管堆 c#
  2. 阿里员工吐槽:我在阿里工作五年,面试一个小公司竟然挂了
  3. 查看resnet101的网络结构
  4. Go语言入门篇-使用Beego构建完整web应用
  5. HTMLCSS 第三天 笔记
  6. trace对页启用跟踪
  7. 快速理解编程结构_为什么系统编程全都用英文而不用中文?听完专家的解释恍然大悟!...
  8. 如何登陆网页的back office_如何使用iPhone面容ID快速登陆应用或网页
  9. UML-类图-关键字如何使用?
  10. Zend Studio 12.5.1 破解、注册码
  11. Servlet(2) 三个域对象
  12. Linux下C语言编程资料
  13. Datawhale集成学习笔记:熟悉机器学习的三大主要任务
  14. 2018中国开源开发者调查问卷
  15. 智能手表的机遇与挑战
  16. ubuntu20+PHP项目运行环境搭建
  17. 企业微信对接网易七鱼机器人
  18. 前进的路上,我们永不止步
  19. 电脑开机显示 UEFI BIOS Utility - EZ Mode
  20. 新iPhone不支持5G将导致出货量进一步下滑

热门文章

  1. RSA Conference 2019 APJ宣布创智赢家(R)式创新计划入围者和早期阶段初创公司展览中极具前景的初创公司
  2. 远程访问及控制SSH 服务
  3. C语言课程设计:新冠疫情管理系统
  4. 双十一好物推荐:2022年好用的数码好物分享
  5. 关于婚姻,你能事先回答这些问题吗?(来自网络)
  6. 没学c语言可以学python_没学过c语言 可以直接学Python吗
  7. JSP-JSTL(Java Standard Tag Library即java标准标签库)
  8. 平等“与”言论自由“
  9. 计算机二级python基本操作题(随机数)
  10. 深度学习系列(一)简介、线性回归与成本函数