被统考草翻回来做题不太行啊,线段树和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. Hadoop MapReduce编程 API入门系列之多个Job迭代式MapReduce运行(十二)

    推荐 MapReduce分析明星微博数据 http://git.oschina.net/ljc520313/codeexample/tree/master/bigdata/hadoop/mapredu ...

  2. DataTable转Dictionary

    DataTable dt = new DataTable(); dt.Columns.Add("name"); dt.Columns.Add("no"); dt ...

  3. lua队列实现

    Queue = {} function Queue.newquene() } end function Queue.push(queue, value) queue.count = queue.cou ...

  4. Monad 系列

    本系列是在学习Monad时在网上找到的一个老外的博客,作者是MikeHadlow,地址是mikehadlow.blogspot.com,  可惜国内访问不了.这个系列对Monad讲解的浅显易懂,而且有 ...

  5. js原生_获取url键值对

    思路: 1.先对url进行处理,获取 ?后的字符串 postid=10457794&actiontip=保存修改成功') 2. 字符串通过&标识,不同参数转为数组 ["pos ...

  6. Spark Streaming 整合 Kafka

    一:通过设置检查点,实现单词计数的累加功能 object StatefulKafkaWCnt { /** * 第一个参数:聚合的key,就是单词 * 第二个参数:当前批次产生批次该单词在每一个分区出现 ...

  7. fabric.js 翻转,复制粘贴,隐藏, 删除,历史记录,撤销, 剪切, 图层,组合打散,锁定等功能

    用vue写的 显示,隐藏 hide(){ this.canvas.getActiveObject().set('opacity', 0).setCoords(); this.canvas.reques ...

  8. Findbugs分析工具介绍

    Findbugs是一个静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题.Findbugs自带检测器,其中有60余种Bad practice,80余种Correct ...

  9. Online ML那点事>-

    一:译自wiki:    KeyWord:标签反馈; Survey: online machine learning is a model of induction that learns one i ...

  10. win 7环境下java环境变量的配置

    http://www.cnblogs.com/zhj5chengfeng/archive/2013/01/01/2841253.html %Java_Home%\bin;%Java_Home%\jre ...