题意:

n<=1e5,abs(x[i]),abs(y[i]<=1e9

思路:这是正解

离散后线段树强打,数据结构越学越傻

 #include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<vector>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef vector<int> VI;
#define fi first
#define se second
#define MP make_pair
#define N 1100000
#define MOD 1000000007
#define eps 1e-8
#define pi acos(-1)
struct arr1
{
int x1,y1,x2,y2;
}a[N]; struct arr2
{
int x,y1,y2,z;
}c[N]; struct tree
{
int a,s,x;
}t[N<<]; int b[N],d[N],q[N],m; int read()
{
int v=,f=;
char c=getchar();
while(c<||<c) {if(c=='-') f=-; c=getchar();}
while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
return v*f;
} void swap(int &x,int &y)
{
int t=x;x=y;y=t;
} int hash1(int x)
{
int l=;
int r=m;
while(l<=r)
{
int mid=(l+r)>>;
if(b[mid]==x) return d[mid];
if(b[mid]<x) l=mid+;
else r=mid-;
}
} bool cmp(arr2 a,arr2 b)
{
return a.x<b.x;
} void pushdown(int p)
{
int l=p<<;
int r=l+;
if(!t[p].a) return;
t[l].s=t[l].s+t[p].a;
t[l].a=t[l].a+t[p].a;
t[r].s=t[r].s+t[p].a;
t[r].a=t[r].a+t[p].a;
t[p].a=;
} void pushup(int p)
{
if(t[p<<].s<t[p+p+].s)
{
t[p].s=t[p+p+].s;
t[p].x=t[p+p+].x;
}
else
{
t[p].s=t[p<<].s;
t[p].x=t[p<<].x;
}
} void build(int l,int r,int p)
{
if(l>r) return;
t[p].a=;
t[p].x=l;
if(l==r) return;
int mid=(l+r)>>;
build(l,mid,p<<);
build(mid+,r,p<<|);
} int query(int l,int r,int x,int y,int p)
{
if(x<=l&&r<=y) return t[p].s;
pushdown(p);
int mid=(l+r)>>;
int ret=-;
if(x<=mid) ret=query(l,mid,x,y,p<<);
if(y>mid)
{
int t=query(mid+,r,x,y,p<<|);
if(t>ret) ret=t;
}
return ret;
} void update(int l,int r,int x,int y,int v,int p)
{
if(x<=l&&r<=y)
{
t[p].s+=v;
t[p].a+=v;
return;
}
pushdown(p);
int mid=(l+r)>>;
if(x<=mid) update(l,mid,x,y,v,p<<);
if(y>mid) update(mid+,r,x,y,v,p<<|);
pushup(p);
} int main()
{
// freopen("cf1028C.in","r",stdin);
// freopen("cf1028C.out","w",stdout);
int x;
scanf("%d",&x);
int k1=x;
m=;
int n=;
for(int i=;i<=x;i++)
{
scanf("%d%d%d%d",&a[i].x1,&a[i].y1,&a[i].x2,&a[i].y2);
b[++m]=a[i].x1;
b[++m]=a[i].y1;
b[++m]=a[i].x2;
b[++m]=a[i].y2;
}
sort(b+,b+m+);
d[]=;
for(int i=;i<=m;i++)
if(b[i]==b[i-]) d[i]=d[i-];
else d[i]=d[i-]+;
q[]=b[];
int len=;
for(int i=;i<=m;i++)
if(b[i]!=b[i-]) q[++len]=b[i]; for(int i=;i<=x;i++)
{
c[++n].x=hash1(a[i].x1);
c[n].y1=hash1(a[i].y1);
c[n].y2=hash1(a[i].y2);
c[n].z=;
c[++n].x=hash1(a[i].x2)+;
c[n].y1=hash1(a[i].y1);
c[n].y2=hash1(a[i].y2);
c[n].z=-;
}
sort(c+,c+n+,cmp);
int line=;
int row=;
for(int i=;i<=n;i++)
{
line=max(line,c[i].x);
row=max(row,c[i].y2);
}
build(,row,); int j=;
for(int i=;i<=line;i++)
{
while(j<=n&&c[j].x==i)
{
update(,row,c[j].y1,c[j].y2,c[j].z,);
// printf("%d %d %d\n",c[j].y1,c[j].y2,c[j].z);
j++;
}
int k=query(,row,,row,);
//printf("%d %d\n",i,k);
if(k>=k1-)
{
// int p=find(1,row,1,row,1);
int p=t[].x;
// printf("%d %d\n",i,p);
int x=q[i];
int y=q[p];
printf("%d %d\n",x,y);
return ;
}
}
return ;
}

【CF1028C】Rectangles(线段树)的更多相关文章

  1. Codeforces 524E Rooks and Rectangles 线段树

    区域安全的check方法就是, 每行都有哨兵或者每列都有哨兵,然后我们用y建线段树, 维护在每个y上的哨兵的x的最值就好啦. #include<bits/stdc++.h> #define ...

  2. [CF983D]Arkady and Rectangles[线段树+可删堆/set]

    题意 你有一个无限大的绘图板,开始颜色是\(0\) , 你将进行\(n\) 次绘图,第\(i\) 次绘图会将左下角为 \((x_1, y_1)\),右上角为\((x_2, y_2)\) 的矩形涂成颜色 ...

  3. VK Cup 2015 - Round 1 E. Rooks and Rectangles 线段树 定点修改,区间最小值

    E. Rooks and Rectangles Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/problemse ...

  4. hdu2461 Rectangles 线段树--扫描线

    You are developing a software for painting rectangles on the screen. The software supports drawing s ...

  5. VK Cup 2015 - Round 1 -E. Rooks and Rectangles 线段树最值+扫描线

    题意: n * m的棋盘, k个位置有"rook"(车),q次询问,问是否询问的方块内是否每一行都有一个车或者每一列都有一个车? 满足一个即可 先考虑第一种情况, 第二种类似,sw ...

  6. 【做题】CSA72G - MST and Rectangles——Borůvka&线段树

    原文链接 https://www.cnblogs.com/cly-none/p/CSA72G.html 题意:有一个\(n \times n\)的矩阵\(A\),\(m\)次操作,每次在\(A\)上三 ...

  7. 线段树+扫描线 NAIPC 2019 Intersecting Rectangles

    你看看你有多菜,一点线段树的小小的运用,就不会写了: 题意:如果矩阵有交集,输出1,否则输出0(不包含内嵌): 思路:本题求交集,还得不包括内嵌的情况: 做过一道是求面积的题.跟这道类似,但在这里定义 ...

  8. POJ1151Atlantis 矩形面积并[线段树 离散化 扫描线]

    Atlantis Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 21734   Accepted: 8179 Descrip ...

  9. 线段树---Atlantis

    题目网址:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110064#problem/A Description There are se ...

随机推荐

  1. JVM内存模型与GC算法(简介)

    JVM内存模型如上图,需要声明一点,这是<Java虚拟机规范(Java SE 7版)>规定的内容,实际区域由各JVM自己实现,所以可能略有不同.以下对各区域进行简短说明. 1.1程序计数器 ...

  2. iOS 开发 Xib 的嵌套使用

    最近公司项目需要使用 Xib 中嵌套 Xib来布局界面的, 研究了很久才实现!!! 分享给大家,希望帮助到更多的开发者...... 开发中自定义界面有两种方式 一: 纯代码实现 适合单个极度复杂的界面 ...

  3. Virt-install用法:

       #一般选项:指定虚拟机的名称.内存大小.VCPU个数及特性等 -n  NAME,  --name=NAME:虚拟机名称,需全局惟一: -r  MEMORY,  --ram=MEMORY:虚拟机内 ...

  4. cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

    参考  http://blog.csdn.net/mazicwong/article/details/54946952 1.到https://curl.haxx.se/ca/cacert.pem复制下 ...

  5. 反爬虫之搭建IP代理池

    反爬虫之搭建IP代理池 听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部.可惜加了header请求头,加了cookie 还是被限制爬取了.这时就得祭出IP代理池!!! 下面就是requ ...

  6. Django 惰性机制

    惰性机制:Publisher.objects.all()或者.filter()等都只是返回了一个QuerySet(查询结果集对象),它并不会马上执行sql,而是当调用QuerySet的时候才执行sql ...

  7. 采用Atlas+Keepalived实现MySQL读写分离、读负载均衡

    ========================================================================================== 一.基础介绍 == ...

  8. perl-basic-分支&循环

    if elsif shorter if: if+condition放在句子尾部. use strict; use warnings; my $word = "antidisestablish ...

  9. HDU - 1465 不容易系列之一(错排)

    HDU有个网名叫做8006的男性同学,结交网友无数,最近该同学玩起了浪漫,同时给n个网友每人写了一封信,这都没什么,要命的是,他竟然把所有的信都装错了信封!注意了,是全部装错哟! 现在的问题是:请大家 ...

  10. pidgin中使用QQ

    安装     实现的功能:   可以发送静态表情 可以发送动态表情 可以发图片? 可以添加好友 可以添加群?