题目链接: HDU - 6681


显然这是一个平面图,我们可以根据欧拉公式:V - E + F = 2假设射线之间交点个数为x,有n条线段。那么V = 4 + x + 2*n , E = 4 + 2*x + 2*n所以:F = 2 + E - V = x + 1所以我们维护交点个数即可。

AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=1e5+10,M=N*200;
int n,m,k,lc[M],rc[M],lazy[M],cnt,rt; char op[5]; long long res;
struct node{int x,y; char ch;}t[N];
inline void push_down(int p){lazy[lc[p]]+=lazy[p],lazy[rc[p]]+=lazy[p],lazy[p]=0;}
#define mid (l+r>>1)
void change(int &p,int l,int r,int ql,int qr){if(l==ql&&r==qr){lazy[p]++; return ;}if(!lc[p])    lc[p]=++cnt;    if(!rc[p])    rc[p]=++cnt;push_down(p);if(qr<=mid)    change(lc[p],l,mid,ql,qr);else if(ql>mid)    change(rc[p],mid+1,r,ql,qr);else change(lc[p],l,mid,ql,mid),change(rc[p],mid+1,r,mid+1,qr);
}
int ask(int p,int l,int r,int x){if(l==r)    return lazy[p];if(!lc[p])    lc[p]=++cnt;    if(!rc[p])    rc[p]=++cnt;push_down(p);if(x<=mid)    return ask(lc[p],l,mid,x);else    return ask(rc[p],mid+1,r,x);
}
#undef mid
inline void init(){for(int i=1;i<=cnt;i++) lc[i]=rc[i]=lazy[i]=0; rt=cnt=1;}
inline void calc(){init();  sort(t+1,t+1+k,[](node a,node b){return a.y<b.y;});for(int i=1;i<=k;i++){if(t[i].ch=='L')  change(rt,1,n,1,t[i].x);else if(t[i].ch=='R')   change(rt,1,n,t[i].x,n);else if(t[i].ch=='D')   res+=ask(rt,1,n,t[i].x);}init();for(int i=k;i>=1;i--){if(t[i].ch=='L')   change(rt,1,n,1,t[i].x);else if(t[i].ch=='R')   change(rt,1,n,t[i].x,n);else if(t[i].ch=='U')   res+=ask(rt,1,n,t[i].x);}printf("%lld\n",res+1);
}
inline void solve(){scanf("%d %d %d",&n,&m,&k); res=0; for(int i=1,x,y;i<=k;i++)    scanf("%d %d %s",&x,&y,op),t[i]={x,y,op[0]};calc();
}
signed main(){int T; cin>>T; while(T--) solve();return 0;
}

HDU - 6681相关推荐

  1. HDU 6681(树状数组统计平面内射线的交点个数)

    HDU 6681(树状数组,统计平面内射线的交点个数) 题目链接:传送门 题意:给出k条射线,求射线将n∗mn*mn∗m 的区域分成几个联通块.每两条射线的端点x坐标和y坐标都互不相同. 思路:根据 ...

  2. hdu - 6681 Rikka with Cake 线段树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6681 题意:给定一个左下顶点为,右上顶点为的矩形,然后给你k条射线,每条射线的起点及方向(上下左右)都 ...

  3. HDU 6681 Rikka with Cake(扫描线、动态开点线段树)

    http://acm.hdu.edu.cn/showproblem.php?pid=6681 题意 在矩形区域内有k条射线,问这些射线将矩形分成了多少区域 题解 容易发现答案为所有射线交点个数+1. ...

  4. HDU 6681 Rikka with Cake (可持久化线段树)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=6681 题意:一个n*m的矩形蛋糕,每次给一个点(x, y)和方向dir确定一条切的线,问最后把蛋糕分成了几 ...

  5. HDU 6681 树状数组 欧拉公式

    给一个长方形的?, 切k刀, 每一刀是顶点互不重合且在蛋糕内, 平行坐标轴的射线, 问把?切成了几块. 欧拉公式: V−E+F=2V-E+F=2V−E+F=2 即点数−边数+面数=2点数-边数+面数= ...

  6. HDU - 6681 Rikka with Cake

    Rikka with Cake Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) P ...

  7. hdu 6681 2019 杭电多校九1002 Rikka with Cake(扫描线+树状数组)

    题意:给一个矩形,在矩形内部有很多射线,这些射线的起点不会碰到矩形边界,问这些射线把矩形分成了几部分 题解:分成的区域数等于线段交点数加一,推导还是看jls的题解把 单说求交点个数的问题,我的方法就是 ...

  8. Rikka with Cake 【多校9 HDU 6681】【欧拉定理+扫描线】

    题目链接 题目大意 有一个蛋糕是一个矩形,一个顶点在(0,0)另一个顶点在(n,m),现在对这个蛋糕进行切割,上下左右四个方向切,问最后这个蛋糕有多少块 解题思路 首先这个题的一个结论是:块数=交点数 ...

  9. hdu 6681 Rikka with Cake(扫描线)

    题意:给你一个n*m的的矩形框 现在又k条射线 问这个矩形框会被分为多少个区域 思路:之前的想法是枚举边界然后线段树扫一遍计算一下矩形个数 复杂度果断不行 后面发现其实答案就是交点数+1 然后就用线段 ...

最新文章

  1. express给html设置缓存,webpack + express 实现文件精确缓存
  2. 深入理解Eureka之源码解析
  3. python 开运算_形态学去噪python(开运算,闭运算)
  4. 【Linux】【服务器】 CentOS7下安装Redis详细过程步骤
  5. 如何使用参数调用SAP UI5的bingAggregation
  6. 【OS学习笔记】二十七 保护模式八:任务切换的方法之----jmp与call的区别以及任务的中断嵌套
  7. #并行优化# 容错算法 (Fault Tolerant)
  8. 清华附2021高考成绩查询,2021年高考多少分能上清华大学?附清华大学录取分数线2020全国汇总...
  9. spark学习-75-源代码:Endpoint模型介绍(6)-Endpoint的消息的接收(2)
  10. javaweb JAVA JSP智能社区管理系统JSP小区物业管理系统物JSP小区管理系统源码 JSP物业社区管理系统
  11. 韦东山freeRTOS系列教程之【第五章】队列(queue)
  12. ECharts(官网:http://echarts.baidu.com)
  13. 实变函数自制笔记6:初识可测函数
  14. 域名检测监控报警系统
  15. 练习3-2,编写一个函数escape(s,t),将字符串t复制到字符串s中,并在复制过程中将换行符、制表符等不可见字符转换为\n、\t等相应的可见的转义字符序列。要求使用switch语句。
  16. go beego在apache服务器上域名配置 --小丑
  17. oracle 查询用户所有的序列号
  18. OpenGL实验2:图形的旋转、平移、缩放
  19. 浅谈马氏距离【Mahalonobis Distance】
  20. 企业官网小程序有什么作用

热门文章

  1. Chango的数学Shader世界(八)光盘模拟-各向异性,光栅衍射
  2. DTK的历史起源、发展,和简单入门
  3. 让ADOBE系列软件恢复英文版
  4. 3DMax导出模型透明解决方案
  5. 一番实验后,有关Batch Size的玄学被打破了
  6. mysql创建销售表_MySQL创建数据表(CREATE TABLE语句)
  7. 前端seo优化可以做些什么?
  8. Pytorch:BertModel使用
  9. 易盛api接口 mysql_易盛9.0行情API接口公共授权.PDF
  10. ImportError: cannot import name ‘Upscale2DLayer‘ from ‘lasagne.layers‘ 解决方案