【STSRM13】绵津见
【算法】扫描线:差分+树状数组
【题意】转化模型后:求每个矩形覆盖多少点和每个点被多少矩形覆盖。n<=10^5。
【题解】经典的扫描线问题(二维偏序,二维数点)。
将所有询问离线并离散化,然后按从上到下排序。
对于点被覆盖问题:
扫描线从上到下进行,遇到矩阵上边界维护区间加,遇到矩阵下边界维护区间减,也就是差分,遇到点单点查询。
每行的排序顺序是{矩阵加,点,矩阵减}。
可以线段树区间维护,也可以树状数组每行各自差分。
对于矩阵覆盖问题:
扫描线从上到下进行,遇到点单点加,遇到矩阵上边界查询区间点数,遇到矩阵下边界查询区间点数并减去上边界区间点数得到一个答案。
每行的排序顺序是{矩阵加,点,矩阵减}。
线段树和树状数组皆可。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cctype>
using namespace std;
const int maxn=;
struct cyc1{int t,x;}a[maxn];
struct cyc2{int t,l,r,y;}b[maxn];
struct cyc{int x,y,y2,id,kind;}q[maxn];
int t[maxn],n,m,mx,my,tot,c[maxn],d[maxn],ans[maxn];
int read()
{
char c;int s=,t=;
while(!isdigit(c=getchar()))if(c=='-')t=-;
do{s=s*+c-'';}while(isdigit(c=getchar()));
return s*t;
}
bool cmp(cyc a,cyc b)
{return a.x==b.x?a.kind>b.kind:a.x<b.x;}
bool cmp2(cyc a,cyc b)
{return a.x==b.x?a.kind>b.kind:a.x<b.x;}
int lowbit(int x){return x&(-x);}
void modify(int x,int k){for(int i=x;i<=my;i+=lowbit(i))t[i]+=k;}
int find(int x){int ans=;for(int i=x;i>=;i-=lowbit(i))ans+=t[i];return ans;}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
int u=read(),v=read();
a[i]=(cyc1){u,v};
c[++mx]=u;
d[++my]=v;
}
for(int i=;i<=m;i++){
int u=read(),v=read(),w=read(),z=read();
b[i]=(cyc2){u,v,w,z};
c[++mx]=u-z;c[++mx]=u+z;
d[++my]=v;d[++my]=w;
}
sort(c+,c+mx+);sort(d+,d+my+);
mx=unique(c+,c+mx+)-c-;
my=unique(d+,d+my+)-d-;
for(int i=;i<=n;i++){
q[++tot]=(cyc){lower_bound(c+,c+mx+,a[i].t)-c,lower_bound(d+,d+my+,a[i].x)-d,,i,};
}
for(int i=;i<=m;i++){
q[++tot]=(cyc){lower_bound(c+,c+mx+,b[i].t-b[i].y)-c,lower_bound(d+,d+my+,b[i].l)-d,lower_bound(d+,d+my+,b[i].r)-d,i,};
tot++;q[tot]=q[tot-];q[tot].x=lower_bound(c+,c+mx+,b[i].t+b[i].y)-c;q[tot].kind=-;
}
sort(q+,q+tot+,cmp);
for(int i=;i<=tot;i++){
if(q[i].kind){modify(q[i].y,q[i].kind);modify(q[i].y2+,-q[i].kind);}
else ans[q[i].id]=find(q[i].y);
}
for(int i=;i<=n;i++)printf("%d ",ans[i]);printf("\n");
sort(q+,q+tot+,cmp2);
memset(t,,sizeof(t));
for(int i=;i<=tot;i++){
if(q[i].kind){
if(q[i].kind==)ans[q[i].id]=find(q[i].y2)-find(q[i].y-);
else ans[q[i].id]=find(q[i].y2)-find(q[i].y-)-ans[q[i].id];
}
else modify(q[i].y,);
}
for(int i=;i<=m;i++)printf("%d ",ans[i]);
return ;
}
【STSRM13】绵津见的更多相关文章
- SRM13绵津见-终(扫描线+线段树/BIT)
题目大意:求对于每个i求有多少个合法的j以及j对于几个i是合法的,合法的定义:l[i]<=x[j]<=r[i],T[i]-y[i]<=t[j]<=T[i]+y[i]. 设a[i ...
- SRM13
由于种种原因,好像出了点锅……? 好在问题不是很大. 得分比我估的要低啊. 木之本樱 计算几何送分题 就是叫你求一共有多少组四线共点,O(n^4)暴力可以过初.枚举两条线,求出交点之后求有多少条直线过 ...
- 汕头市队赛 SRM1X T2 ——扫描线
绵津见-终 SRM 13 背景 “西瓜也是可以种在海上的!”——绵津见 然而种在海上的西瓜最需要防范的,是时不时会涌向瓜田的阵阵海浪. 幸好,身为海神的绵津见可以释放魔法“水平如镜”来阻止海浪拍打西瓜 ...
- Material Design Reveal effect(揭示效果) 你可能见过但是叫不出名字的小效果
Material Design Reveal effect(揭示效果) 你可能见过但是叫不出名字的小效果 前言: 每次写之前都会来一段(废)话.{心塞...} Google Play首页两个tab背景 ...
- 你可曾见过如此简单粗暴的JavaScript解说 -- if 判断的正确打开方式?
在JavaScript中,对于 if else 的逻辑判断你肯定非常熟悉,本文罗列了几种你不一定知道的简写方式,仅供参考. 例子: 已知小明考了68分,小于60分为不及格,大于60分为及格,问:小明是 ...
- Java正则速成秘籍(三)之见招拆招篇
导读 正则表达式是什么?有什么用? 正则表达式(Regular Expression)是一种文本规则,可以用来校验.查找.替换与规则匹配的文本. 又爱又恨的正则 正则表达式是一个强大的文本匹配工具,但 ...
- 腾讯网2016回响中国:华清远见荣获2016年度知名IT培训品牌
12月1日,由腾讯网主办的“2016回响中国·腾讯网教育年度盛典”上,揭晓了“2016腾讯网教育年度总评榜”榜单.高端IT就业培训专家——华清远见教育集团凭借自身优质的高薪IT就业服务优势成功入围,荣 ...
- 华清远见成为ARM大学计划正式合作伙伴
来源:华清远见嵌入式学院 近日,华清远见教育集团成为ARM大学计划合作伙伴,这是ARM大学计划合作伙伴中的国内唯一教育机构.此次合作是ARM公司对华清远见教育集团的高度认可,也充分证明了华清远见这些年 ...
- Qcon会议之所见所想
作为普通码农一枚,Qcon是俺参与过的最高级的技术大会了.大会共历时三天,因为俺第二天就得赶火车休个五一大长假,所以只参加了第一天4/25号的会议(其他俩天自然有其他同事会去观摩),不过第一天的会议有 ...
随机推荐
- winform 弹出窗体指定位置
在启动一个程序时,我们希望窗口显示的位置处于屏幕的正中心,可以如下设置: MainForm mainForm = new MainForm(); mainForm.StartPosition = Fo ...
- java复利计算基本代码
源代码: public class Calculate { public static void main(String[] args){ double money = 1000; //本金 int ...
- Alpha阶段事后诸葛亮分析
事后诸葛亮分析 一.设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件可供各类人群闲暇时间消遣娱乐,锻炼脑力. 定义的很清楚,就是一个定位 ...
- QMap使用
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QMap使用 本文地址:https://www.techieliang.com/201 ...
- 九度-题目1026:又一版 A+B
http://ac.jobdu.com/problem.php?pid=1026 题目描述: 输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m ...
- django学习系列-01
安装Django > pip install django==1.10.3(py2)或者>python3 -m pip install django==1.10.3(py3) 成功安装 D ...
- python的N个小功能(连接数据库并下载相应位置的图片)
#################################################################################################### ...
- 吉哥系列故事――完美队形II HDU - 4513(马拉车变一下形)
题意: 求最长回文串...但这个回文串要符合从中间到两头 逐个递减 解析: 在扩散的时候加一个判断就好了 #include <iostream> #include <cstdio&g ...
- What Is The Promiscuous Mode
What Is The Promiscuous Mode? Some Network Interface Cards (NICs) may not allow network traffic afte ...
- C++操作Windows WIFI
原文链接地址:https://blog.csdn.net/just_do_1122/article/details/78031024 实现功能 无线网卡列表 无线热点扫面 无线 ...