codeforces524E
题意:n*m的矩阵,给出k个点,Q次询问,问每个矩阵中每个点是否被看管,一个点被看管的定义是那个点所在的行或列有点,n,m<=1e5,k,q<=2e5
sol :发现行和列是独立的,即要么每行都有点或每列都有点,所以可以用线段树艹,对于x建线段树,对于所有y<=y2的点加入y的坐标,询问x1,x2中y的最小值是否>=y1即可(x1,y1,x2,y2是查询矩阵的左下右上)
#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{
ll s=; bool f=; char ch=' ';
while(!isdigit(ch)) {f|=(ch=='-'); ch=getchar();}
while(isdigit(ch)) {s=(s<<)+(s<<)+(ch^); ch=getchar();}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<) {putchar('-'); x=-x;}
if(x<) {putchar(x+''); return;}
write(x/); putchar((x%)+'');
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int B=,N=;
int n,m,k,Q;
bool ans[N];
struct point
{
int x,y;
inline bool operator<(const point &tmp)const
{
return y<tmp.y;
}
}sb[N];
struct xunwen
{
int x1,y1,x2,y2,id;
inline bool operator<(const xunwen &tmp)const
{
return y2<tmp.y2;
}
}xw[N];
struct node{int mn;}T[B<<];
#define c1 (x<<1)
#define c2 (x<<1|1)
inline void build(int x,int l,int r)
{
T[x].mn=; if(l==r) return;
int mid=(l+r)>>;
build(c1,l,mid); build(c2,mid+,r);
T[x].mn=min(T[c1].mn,T[c2].mn);
}
inline void chag(int x,int l,int r,int pos,int val)
{
if(l==r)
{
T[x].mn=max(T[x].mn,val); return;
}
int mid=(l+r)>>;
if(pos<=mid) chag(c1,l,mid,pos,val);
else chag(c2,mid+,r,pos,val);
T[x].mn=min(T[c1].mn,T[c2].mn);
}
inline int que(int x,int l,int r,int ql,int qr)
{
if(l==ql&&r==qr) return T[x].mn;
int mid=(l+r)>>;
if(qr<=mid) return que(c1,l,mid,ql,qr);
else if(ql>mid) return que(c2,mid+,r,ql,qr);
else return min(que(c1,l,mid,ql,mid),que(c2,mid+,r,mid+,qr));
}
inline void Solve()
{
int i,j=;
build(,,n);
sort(sb+,sb+k+);
sort(xw+,xw+Q+);
for(i=;i<=Q;i++)
{
while(j<=k&&sb[j].y<=xw[i].y2)
{
chag(,,n,sb[j].x,sb[j].y); j++;
}
int oo=que(,,n,xw[i].x1,xw[i].x2);
if(oo>=xw[i].y1) ans[xw[i].id]=;
}
}
int main()
{
freopen("codeforces524E_data.in","r",stdin);
int i;
memset(ans,,sizeof ans);
R(n); R(m); R(k); R(Q);
for(i=;i<=k;i++) R(sb[i].x),R(sb[i].y);
for(i=;i<=Q;i++)
{
R(xw[i].x1); R(xw[i].y1); R(xw[i].x2); R(xw[i].y2); xw[i].id=i;
}
Solve();
swap(n,m);
for(i=;i<=k;i++) swap(sb[i].x,sb[i].y);
for(i=;i<=Q;i++)
{
swap(xw[i].x1,xw[i].y1); swap(xw[i].x2,xw[i].y2);
}
Solve();
for(i=;i<=Q;i++)
{
if(ans[i]) puts("YES"); else puts("NO");
}
return ;
}
codeforces524E的更多相关文章
随机推荐
- 用ASP.NET Web API技术开发HTTP接口(一)
开发工具 Visual Studio 2013 SQL Server 2008 R2 准备工作 启动Visual Studio 2013,新建一个ASP.NET Web应用程序,命名为SimpleAP ...
- sqlserver导入Excel数据 总是报错:错误 0xc020901c: 数据流任务 1: 输出“Excel 源输出”(55) 上的 输出列“T2”(64) 出错。返回的列状态是:“文本被截断,或者一个或多个字符在目标代码页中没有匹配项
在网络上搜索解决办法,解决办法是把excel导入到access数据库中,再把access数据库导入到sqlsever中,公司机器上不让安装office工具,问了一个同事得到的回答是把数据中很长的那行数 ...
- 元组和range
元组 只读列表,不支持增 删 改:但是元组里的列表可以增删改 元组其实就是通过逗号(,)设定的,和小括号并没有什么必然的关系,所以当元组只有一个元素的时候,需要在元素后加个逗号 存储大量数据,有序.不 ...
- Android笔记(二十五) ListView的缓存机制与BaseAdapter
之前接触了ListView和Adapter,Adapter将数据源和View连接起来,实际应用中,我们要显示的数据往往有很多,而屏幕只有那么大,系统只能屏幕所能显示的内容,当我们滑动屏幕,会将旧的内容 ...
- 交付Dubbo微服务到kubernetes集群
1.基础架构 1.1.架构图 Zookeeper是Dubbo微服务集群的注册中心 它的高可用机制和k8s的etcd集群一致 java编写,需要jdk环境 1.2.节点规划 主机名 角色 ip hdss ...
- MyBatis3_[tp_38~]_动态sql_if_判断&OGNL_where标签_
笔记要点出错分析与总结 /** 笔记: * 查询的时候,如果某些条件,没带可能SQL拼装会有问题; * 1.-->给where 后面加上 1=1, 以后的条件都and XXX * 2. < ...
- 使用宏定义来判断是a和b 的大小
#include <stdio.h> #include <math.h> #define MAX(a, b) (a) > (b) ? printf("a > ...
- React 零碎笔记
1.对数组的操作(添加.更新.删除) const posts = [...this.state.posts]; posts.push(post); this.setState({posts}); =& ...
- Jmeter逻辑控制之if控制器
一.背景 在实际工作中,当使用Jmeter做性能脚本或者接口脚本时,有可能会遇到需要对不同的条件做不同的操作,基于这种诉求,在Jmeter中可使用if控制器来实现 二.实际操作 逻辑控制器位置: 在线 ...
- unsafe包的学习和使用
Go语言之unsafe包介绍及使用 unsafe内容介绍 type ArbitraryType int type Pointer *ArbitraryType func Sizeof(x Arbitr ...