被统考草翻回来做题不太行啊,线段树和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 矩形藏宝地的更多相关文章

  1. [BZOJ1790][AHOI2008]Rectangle 矩形藏宝地(四维偏序,CDQ+线段树)

    1790: [Ahoi2008]Rectangle 矩形藏宝地 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 553  Solved: 193[Subm ...

  2. BZOJ 1790: [Ahoi2008]Rectangle 矩形藏宝地

    BZOJ 1790: [Ahoi2008]Rectangle 矩形藏宝地 题目传送门 [题目大意] 游戏的主办方把这块开阔地当作第一象限,将所有可能埋藏宝藏的地方划成一个个矩形的土地,并把这些矩形土地 ...

  3. HDU-4419 Colourful Rectangle 矩形多面积并

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4419 利用二进制,R为1.G为2.B为4,然后通过异或运算可以得到其它组合颜色.建立7颗线段树,每颗线 ...

  4. 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 ...

  5. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  6. iOS 2D绘图 (Quartz2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)

    博客原地址:http://blog.csdn.net/hello_hwc?viewmode=list 让我们继续跟着大神的脚步前进吧.这一次 我们学习一些Quartz 2D 最基本的一些用法. 前言: ...

  7. shape 填充 圆角矩形 圆形 环形

    属性 使用中可能出现的问题: 如果在某些手机中使用 shape 出现黑色填充背景,设置<solid android:color="@color/transparent"/&g ...

  8. WPF 基础 - 绘画 1) 线段、矩形、圆弧及填充色

    1. 绘画 1.1 图形类型 Line X1.Y1.X2.Y2,Stroke,StrokeThickness Rectangle 矩形 Ellipse 椭圆 Polygon 多边形(自动闭合) Pol ...

  9. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

随机推荐

  1. hibernate dao 公共方法

    package com.dao.impl; import java.lang.reflect.ParameterizedType; import java.util.Collection; impor ...

  2. Android 消息队列机制

    在非UI线程使用Handler进行线程通信时,一般都需要进行3个步骤: 创建Looper Looper.prepar() 创建Handler 启动消息循环Looper.loop() 通过这3步,基本就 ...

  3. postgreSQL格式化时间的函数详解

    数据类型格式化函数:    PostgreSQL格式化函数提供一套有效的工具用于把各种数据类型(日期/时间.integer.floating point和numeric)转换成格式化的字符串以及反过来 ...

  4. SQLite Tips

    附加数据库 Attach database filename as database_name; 主数据库默认为 "Main", 在使用Attach命令时, 不能将database ...

  5. Linux强行踢用户

    首先who执行查看有几个终端在链接使用系统.如要踢出tty2 方法1: pkill -9 -t tty2 方法2: fuser -k /dev/tty2 fuser 指令 用途 使用文件或文件结构识别 ...

  6. Python框架、库和软件资源大全(整理篇)

    有少量修改,请访问原始链接.PythonWIn的exe安装包;http://www.lfd.uci.edu/~gohlke/pythonlibs/ 原文链接:codecloud.net/python- ...

  7. ML一:python的KNN算法

    (1):list的排序算法: 参考链接:http://blog.csdn.net/horin153/article/details/7076321 示例: DisListSorted = sorted ...

  8. 模拟试题C

    模拟试题C 一.单项选择题(2′*14 =28′) 1.双线性法向插值法(Phong Shading)的优点是( ) A)法向计算精确 B)高光域准确 C)对光源和视点没有限制 D)速度较快 2.用编 ...

  9. 03--SQLtie三言两语SQLtie链接(join)

    本文将从连接的理论和语法讲起,结合具体的例子,详细分析 SQL 连接. 之前对数据库的连接操作似懂非懂,大概知道是什么东西,但是面试笔试的时候被虐成渣,讲不清连接到底是什么.吃一堑,长一智.这就是所谓 ...

  10. Steamroller FreeCodeCamp

    function steamroller(arr) { // I'm a steamroller, baby var resultArr = []; for(var i = 0; i < arr ...