bzoj1790: [Ahoi2008]Rectangle 矩形藏宝地
被统考草翻回来做题不太行啊,线段树和cdq都写挂细节
这题大概就是四维偏序吧,欸n怎么到了20w,只能水70啊
但是这个好像只要有1个在里面就可以ans就可以++了耶
突然想到高中奥数老师说的,大概是这样的
a<|x-2|/x^2+1 x取任意数,求a的范围,就相当于求后面那坨的最小值
运用这个思想
那么就搞个线段树,下标跟树状数组一样判第三维,然后维护一下第四维区间最大值,只要判一下这个最大值是否比当前的第四维大,假如大的话就说明至少有一个包含当前了。
貌似挺水?
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; int n;
struct node
{
int x,y,u,v;bool flag;
}a[];int ans;
int lslen,ls[];
void LSH()//只有线段树下标需要离散
{
for(int i=;i<=n;i++)ls[++lslen]=a[i].u;
sort(ls+,ls+lslen+); lslen=unique(ls+,ls+lslen+)-ls-;
for(int i=;i<=n;i++)
a[i].u=lower_bound(ls+,ls+lslen+,a[i].u)-ls;
}
bool cmp(node n1,node n2){return n1.x<n2.x;} //------------init----------------------------------- struct seg_tree
{
int l,r,lc,rc,c;
}tr[];int trlen;
void bt(int l,int r)
{
int now=++trlen;
tr[now].l=l;tr[now].r=r;tr[now].c=;
tr[now].lc=tr[now].rc=-;
if(l<r)
{
int mid=(l+r)/;
tr[now].lc=trlen+;bt(l,mid);
tr[now].rc=trlen+;bt(mid+,r);
}
}
void change(int now,int p,int c)
{
if(tr[now].l==tr[now].r){tr[now].c=c;return ;}
int mid=(tr[now].l+tr[now].r)/;
int lc=tr[now].lc,rc=tr[now].rc;
if(p<=mid)change(lc,p,c);
else change(rc,p,c);
tr[now].c=max(tr[lc].c,tr[rc].c);
}
int findmax(int now,int l,int r)
{
if(tr[now].l==l&&tr[now].r==r)return tr[now].c;
int mid=(tr[now].l+tr[now].r)/;
int lc=tr[now].lc,rc=tr[now].rc;
if(r<=mid) return findmax(lc,l,r);
else if(mid+<=l)return findmax(rc,l,r);
return max(findmax(lc,l,mid),findmax(rc,mid+,r));
}
//~~~~seg_tree for 3 4~~~~~ node tt[];
void cdq(int l,int r)
{
if(l==r)return ;
int mid=(l+r)/;
cdq(l,mid);cdq(mid+,r); int p=l,i=l,j=mid+;
while(i<=mid&&j<=r)
{
if(a[i].y<=a[j].y)
{
change(,a[i].u,a[i].v);
tt[p++]=a[i++];
}
else
{
if(a[j].flag==false)
{
if(findmax(,a[j].u,lslen)>a[j].v)
a[j].flag=true,ans++;
}
tt[p++]=a[j++];
}
}
while(i<=mid)
{
change(,a[i].u,a[i].v);
tt[p++]=a[i++];
}
while(j<=r)
{
if(a[j].flag==false)
{
if(findmax(,a[j].u,lslen)>a[j].v)
a[j].flag=true,ans++;
}
tt[p++]=a[j++];
} for(int i=l;i<=mid;i++)change(,a[i].u,);
for(int i=l;i<=r;i++)a[i]=tt[i];
} //-----------cdq--------------------------- int main()
{
freopen("data.in","r",stdin);
freopen("1.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d%d%d%d",&a[i].x,&a[i].y,&a[i].u,&a[i].v),a[i].flag=false;
LSH(); ans=;bt(,lslen);
sort(a+,a+n+,cmp);cdq(,n);
printf("%d\n",ans);
return ;
}
bzoj1790: [Ahoi2008]Rectangle 矩形藏宝地的更多相关文章
- [BZOJ1790][AHOI2008]Rectangle 矩形藏宝地(四维偏序,CDQ+线段树)
1790: [Ahoi2008]Rectangle 矩形藏宝地 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 553 Solved: 193[Subm ...
- BZOJ 1790: [Ahoi2008]Rectangle 矩形藏宝地
BZOJ 1790: [Ahoi2008]Rectangle 矩形藏宝地 题目传送门 [题目大意] 游戏的主办方把这块开阔地当作第一象限,将所有可能埋藏宝藏的地方划成一个个矩形的土地,并把这些矩形土地 ...
- HDU-4419 Colourful Rectangle 矩形多面积并
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4419 利用二进制,R为1.G为2.B为4,然后通过异或运算可以得到其它组合颜色.建立7颗线段树,每颗线 ...
- PKUSC2018训练日程(4.18~5.30)
(总计:共66题) 4.18~4.25:19题 4.26~5.2:17题 5.3~5.9: 6题 5.10~5.16: 6题 5.17~5.23: 9题 5.24~5.30: 9题 4.18 [BZO ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- iOS 2D绘图 (Quartz2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)
博客原地址:http://blog.csdn.net/hello_hwc?viewmode=list 让我们继续跟着大神的脚步前进吧.这一次 我们学习一些Quartz 2D 最基本的一些用法. 前言: ...
- shape 填充 圆角矩形 圆形 环形
属性 使用中可能出现的问题: 如果在某些手机中使用 shape 出现黑色填充背景,设置<solid android:color="@color/transparent"/&g ...
- WPF 基础 - 绘画 1) 线段、矩形、圆弧及填充色
1. 绘画 1.1 图形类型 Line X1.Y1.X2.Y2,Stroke,StrokeThickness Rectangle 矩形 Ellipse 椭圆 Polygon 多边形(自动闭合) Pol ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
随机推荐
- expdp通过dblink远端导出
环境说明: db62是源端 rac数据库 dw03为需要导入的目标端数据库单机,实例名,服务名,字符串名都为dw03 数据库版本:11.2.0.4 操作系统:rehat 6.7 1.创建dblink ...
- WPF Menu控件自定义Style
自定义WPF中Menu控件的样式
- 树的问题小结(最小生成树、次小生成树、最小树形图、LCA、最小支配集、最小点覆盖、最大独立集)
树的定义:连通无回路的无向图是一棵树. 有关树的问题: 1.最小生成树. 2.次小生成树. 3.有向图的最小树形图. 4.LCA(树上两点的最近公共祖先). 5.树的最小支配集.最小点覆盖.最大独立集 ...
- PHP入门及服务环境配置(Nginx+PHP)
PHP入门及服务环境配置(Nginx+PHP) PHP入门 PHP维基百科: PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一 ...
- 【SQL】SELECT 语句
1.1 SELECT基本语法: Select * |{[distinct]colum|expression [alias],…} from table; 1.2 查询当前用户所有在用的表及视图: HR ...
- 认识优动漫PAINT,优动漫PAINT基本功能有哪些?
优动漫PAINT是一款搭载了绘制漫画.插画所需所有功能的软件.拥有笔感自然真实.表现形式多样的画笔工具,及高效.完美.便捷的上色工具等. 本文将通过由优动漫PAINT描绘的作品为例,简单介绍该软件的功 ...
- 文字纵向滚动marquee
<div style="width:200px; height:300px"><marquee direction="up" truespee ...
- Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案
点关注,不迷路:持续更新Java架构相关技术及资讯热文!!! 相信使用Mybaits的小伙伴们一定会经常编写类似如下的代码: 可以看到 userMapper 下有个红色警告.虽然代码本身并没有问题,能 ...
- Visual Studio 2015中 安卓环境 cannot find adb.exe in specified sdk path
安装完成后 发现 C:\Program Files (x86)\Android\android-sdk\platforms 是空的,用SDK Manager进行安装时发现 它需要往C:\Program ...
- Windows批量查找文件
for /r 目录名 %i in (匹配模式1,匹配模式2) do @echo %i for /r SATA %i in (*.txt) do @echo %i D:\REY\test>for ...