【CF1194E】Count The Rectangles【类扫描线】【单调性】【树状数组】

传送门

题意:给定NNN条与坐标轴平行的线段,保证不垂直的线段没有交点,求一共构成多少个矩形(以线段交点为顶点)。

1≤N≤50001\leq N\leq50001N5000

显然是个数据结构乱搞题。

直觉告诉我们先枚举一条线段。

假如我们枚举矩形的上边界,我们希望找到可以构成矩形的其他边。

如果我们找下边界,那左右边界即要穿过上下边界,还要在上下边界的交集内,很难维护。

所以我们可以找左右边界。

我们发现和上边界相交的竖直线都可以当左右边界,所以先找一遍存起来。

这样我们只需要计算下边界和多少个竖直线相交,n(n−1)/2n(n-1)/2n(n1)/2即可

但是我们还需要满足下边界在竖直线下端点的上面

然后我们发现这个可以用单调性搞掉

即开始时水平线按高度排序,把竖直线丢进去后按下端点的高度排序,枚举下面的水平线作为下边界,如果在竖直线下端点的下面就丢掉,然后区间查询竖直线的个数。

在这里插入图片描述
树状数组维护即可。

复杂度O(n2logn)O(n^2logn)O(n2logn)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <algorithm>
#define MAXN 5005
using namespace std;
typedef long long ll;
struct line{int p,l,r;}hor[MAXN],ver[MAXN],pos[MAXN];
int cnt1,cnt2;
const int N=10005;
struct BIT
{int s[MAXN<<1];inline int lowbit(const int& x){return x&-x;}inline void modify(int x,const int& v){x+=MAXN;for (;x<=N;s[x]+=v,x+=lowbit(x));}inline int query(int x){int ans=0;x+=MAXN;for (;x;ans+=s[x],x-=lowbit(x));return ans;};
}bit;
inline bool cmp1(const line& a,const line& b){return a.p<b.p;}
inline bool cmp2(const line& a,const line& b){return a.r<b.r;}
int main()
{int n;scanf("%d",&n);for (int i=1;i<=n;i++){int x1,y1,x2,y2;scanf("%d%d%d%d",&x1,&y1,&x2,&y2);if (x1>x2) swap(x1,x2);if (y1>y2) swap(y1,y2);if (x1==x2) ver[++cnt2]=(line){x1,y1,y2};else hor[++cnt1]=(line){y1,x1,x2};}sort(hor+1,hor+cnt1+1,cmp1);ll ans=0;for (int i=1;i<=cnt1;i++){int tot=0;for (int j=1;j<=cnt2;j++)if (ver[j].l<=hor[i].p&&hor[i].p<=ver[j].r&&hor[i].l<=ver[j].p&&ver[j].p<=hor[i].r)pos[++tot]=ver[j];sort(pos+1,pos+tot+1,cmp2);for (int j=1;j<=tot;j++) bit.modify(pos[j].p,1);int now=1;for (int j=i+1;j<=cnt1;j++){while (now<=tot&&pos[now].r<hor[j].p) bit.modify(pos[now].p,-1),++now;int t=bit.query(hor[j].r)-bit.query(hor[j].l-1);ans+=(ll)t*(t-1)/2;}while (now<=tot) bit.modify(pos[now].p,-1),++now;}cout<<ans;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET Core 的过去、现在和未来

在最新的微软 Build 大会主题网站上&#xff0c;微软.NET 程序经理 Scott Hunter 发表了一篇文章&#xff0c;指出.NET Core 是.NET 的未来。去年&#xff0c;微软就已经确认 Visual Studio Live 中的.NET 框架将会被.NET Core 取代。将.NET Core 作为开源开发技术栈在 2014 年…

Visual Basic 兴衰记

这是一篇暴露年龄的文章。为什么这么说&#xff1f;因为现在年轻的程序员可能没有接触过当年红极一时的 Visual Basic。28 年前的 1991 年 4 月&#xff0c;Microsoft 发布了 Visual Basic 1.0 for Windows&#xff0c;次年 9 月&#xff0c;发布了 Visual Basic 1.0 for DOS。…

函数式编程里的Materialization应该翻译成什么?

Materialization是函数式编程里的一个专业术语, 用于特指函数式编程中查询被实际执行并生成结果的这一过程.首先, 搜了一下中文资料, 暂时没有对该词的中文翻译, CSDN\博客园\阿里云上所有关于它的文档都没有做中文翻译, 直接沿用这个英文单词.难道轮到我来创造这个词的中文翻…

Ozon Tech Challenge 2020 (Div.1 + Div.2) E.Kuroni and the Score Distribution 构造

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 不难想到&#xff0c;长度为nnn的数组最多的满足条件的三元组序列是1,2,3....,n1,2,3....,n1,2,3....,n&#xff0c;对于每一个位置贡献为i−12\frac{i-1}{2}2i−1​&#xff0c;那么如果m…

Exceptionless(二) - 使用进阶

作者&#xff1a;markjiang7m2原文地址&#xff1a;https://www.cnblogs.com/markjiang7m2/p/11100563.html官网地址&#xff1a;http://letyouknow.net在上一篇文章Exceptionless - .Net Core开源日志框架中就说到如何对Exceptionless进行本地化部署&#xff0c;不过我也跟大家…

基于 Kong 和 Kubernetes 的 WebApi 多版本解决方案

前言大家好&#xff0c;很久没有写博客了&#xff0c;最近半年也是比较的忙&#xff0c;所以给关注我的粉丝们道个歉。去年和朱永光大哥聊的时候提了一下我们的这个方案&#xff0c;他说让我有空写篇博客讲一下&#xff0c;之前是非常的忙&#xff0c;所以这次趁着有些时间就写…

CodeCraft-20 (Div. 2) D. Nash Matrix 构造 + dfs

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给定一个n∗nn*nn∗n的矩阵&#xff0c;每个点上面都有一个xi,yix_i,y_ixi​,yi​&#xff0c;表示这个点到xi,yix_i,y_ixi​,yi​这个点停下&#xff0c;当xi−1,yi−1x_i-1,y_i-1xi​−1,yi​−1的时候代表…

从严治码-别人在项目中下毒,我该怎么治?

01 从软考说起从4月份开始&#xff0c;由于备考《系统集成项目管理工程师》的原因&#xff0c;博客没有持续更新&#xff0c;在上半年考试结束之后&#xff0c;又对项目进行了一些收尾的工作。下面就这段时间的学习作一个记录和总结吧。在学习的过程中&#xff0c;提炼了一些自…

学习MVVM设计模式后第一次用于生产

WPF的MVVM设计模式从winform转变到WPF的过程&#xff0c;难点主要还是在MVVM的设计模式。当然&#xff0c;如果依然采用winform的涉及方式&#xff0c;在每个控件背后绑定事件的方式运用在wpf中&#xff0c;依然可行&#xff0c;但是假如GUI改版&#xff0c;其背后绑定的特别为…

netcore mvc快速开发系统(菜单,角色,权限[精确到按钮])开源

基于netcore2.0 mvc 开发的 快速搭建具有如下特色的后台管理系统用户管理菜单管理角色管理权限管理[精确到按钮]&#xff09;代码生成器代码克隆到本地 用vs2017或以上版本 打开工程。项目结构如下&#xff1a;找到DbModel下面的初始化db脚本里面包含4张表的schema和初始化数据…

asp.net core 系列之Startup

这篇文章简单记录 ASP.NET Core中 &#xff0c;startup类的一些使用。一.前言在 Startup类中&#xff0c;一般有两个方法&#xff1a;ConfigureServices 方法: 用来配置应用的 service 。 Configure 方法&#xff1a;创建应用的请求处理管道它们都在应用启动时&#xff0c;被AS…

译 | .NET Core 基础架构进化之路(一)

原文&#xff1a;Matt Mitchell翻译&#xff1a;Edi Wang随着 .NET Core 3.0 Preview 6 的推出&#xff0c;我们认为简要了解一下我们基础设施系统的历史以及过去一年左右所做的重大改进会很有用。如果您对构建基础结构感兴趣&#xff0c;或者想要了解我们如何构建与 .NET Core…

剑指 Offer 27. 二叉树的镜像

思路&#xff1a;递归 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:TreeNode* mirrorTree(TreeNode*…

Codeforces Round #626 (Div. 2) D. Present 按位贡献 + 快排新姿势

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个长度为nnn的序列aaa&#xff0c;让你计算 n≤4e5,a≤1e7n\le 4e5,a\le 1e7n≤4e5,a≤1e7 思路&#xff1a; 首先这个式子是n2n^2n2的&#xff0c;显然不能直接算&#xff0c;并且异或没有分配律&…

.NET开发框架(一)-框架介绍与视频演示

本文主要介绍一套基于.NET CORE的SPA高并发、高可用的开发框架.我们暂且称它为&#xff1a;&#xff08;让你懂.NET&#xff09;开发框架。以此为主线&#xff0c;陆续编写教程&#xff0c;讲述如何构建高并发、高可用的框架。&#xff08;欢迎转载与分享&#xff09;它标准化了…

译 | .NET Core 基础架构进化之路(二)

原文&#xff1a;Matt Mitchell翻译&#xff1a;Edi Wang&#xff08;接上篇 译 | .NET Core 基础架构进化之路&#xff08;一&#xff09;&#xff09;Maestro 及依赖流.NET Core 3.0 基础结构难题的最后一部分就是我们所说的依赖项流。这不是 .NET Core 的唯一概念。除非它们…

在.Net Core中实现一个WebSocket路由

Net Core中使用WebSocket默认是没有路由系统的&#xff0c;只能通过Request.Path"/xxx"来判断请求&#xff0c;例如&#xff1a;1 2 3 4 5 6 7 8 91011121314151617181920app.Use(async (context, next) >{ if (context.Request.Path "/ws") { …

Dapper介绍--Micro-ORM

一&#xff0e;概述目前对于.net的数据访问ORM工具很多&#xff0c;EF和EF Core是一个重量级的框架。最近在搭建新的项目架构&#xff0c;来学习一下轻量级的数据访问ORM工具Dapper。Dapper支持SQL Server&#xff0c;MySQL&#xff0c;Sqlite&#xff0c;SqlCE&#xff0c;Fir…

剑指 Offer 31. 栈的压入、弹出序列

思路&#xff1a;模拟就完事 class Solution { public:bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {stack<int> c;int idx0;for(int v:pushed){c.push(v);while(c.size()&&c.top()popped[idx]){c.pop();idx;}…

Educational Codeforces Round 84 (Rated for Div. 2) D. Infinite Path 构建环 + 思维

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 懒得写了&#xff0c;直接贴图了。 思路&#xff1a; 遇事不决画成图&#xff0c;考虑将iii向p[i]p[i]p[i]连一个边&#xff0c;可以发现每个点入度为111&#xff0c;出度为111&#xff0c;所以画出来是若…