bzoj4605: 崂山白花蛇草水

链接

bzoj
loj

思路

强制在线,那就权值线段树套KDtree好了,没啥好讲的。
KDtree要加平衡因子来重构。另外,那水真难喝。

错误

树套树一边写过了,然后是各种傻屌错误。
我居然离散化了权值,要被gzy嘲笑了。
我一开始还笑话那些写动态开点的慢,
然后就被啪啪脸了。
我回收内存不知道咋的多了个if。
然后就逼近内存上限半个G。
总之就是很多傻吊错误。

代码

#include <bits/stdc++.h>
#define cmin(a,b) (a>b?a=b:a)
#define cmax(a,b) (a>b?a:a=b)
using namespace std;
const int N=1e5+7;
const double alpha=0.8;
int read() {int x=0,f=1;char s=getchar();for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';return x*f;
}
int Wn;
struct point {int x[2];} p[N];
bool cmp(point a,point b) {return a.x[Wn]<b.x[Wn];
}
struct kdnode {int ch[2],ma[2],mi[2],siz;point a;
}t[N*30];
int stak[N*30],top,num;
int newnode() {if(top) return stak[top--];return ++num;
}
void update(int x,int y) {cmin(t[x].mi[0],t[y].mi[0]);cmin(t[x].mi[1],t[y].mi[1]);cmax(t[x].ma[0],t[y].ma[0]);cmax(t[x].ma[1],t[y].ma[1]);
}
void up(int u) {t[u].siz=t[t[u].ch[0]].siz+t[t[u].ch[1]].siz+1;t[u].mi[0]=t[u].ma[0]=t[u].a.x[0];t[u].mi[1]=t[u].ma[1]=t[u].a.x[1];if(t[u].ch[0]) update(u,t[u].ch[0]);if(t[u].ch[1]) update(u,t[u].ch[1]);
}
int build(int l,int r,int wn) {if(l>r) return 0;int mid=(l+r)>>1;Wn=wn;nth_element(p+l,p+mid,p+r+1,cmp);int u=newnode();t[u].a=p[mid];t[u].ch[0]=build(l,mid-1,wn^1);t[u].ch[1]=build(mid+1,r,wn^1);up(u);return u;
}
void pia(int u,int num) {if(t[u].ch[0]) pia(t[u].ch[0],num);p[num+t[t[u].ch[0]].siz+1]=t[u].a;stak[++top]=u;if(t[u].ch[1]) pia(t[u].ch[1],num+t[t[u].ch[0]].siz+1);
}
void check(int &x,int wn) {if(t[x].siz*alpha<t[t[x].ch[0]].siz||t[x].siz*alpha<t[t[x].ch[1]].siz)pia(x,0),x=build(1,t[x].siz,wn);
}
void insert(point a,int &u,int wn) {if(!u) {u=newnode();t[u].a=a;t[u].ch[0]=t[u].ch[1]=0;up(u);return;}if(a.x[wn]<t[u].a.x[wn]) insert(a,t[u].ch[0],wn^1);else insert(a,t[u].ch[1],wn^1);up(u),check(u,wn);
}
int pd(point a,point b,int k) {if(a.x[0]<=t[k].mi[0]&&t[k].ma[0]<=b.x[0]&&a.x[1]<=t[k].mi[1]&&t[k].ma[1]<=b.x[1]) return 2;if(a.x[0]>t[k].ma[0]||b.x[0]<t[k].mi[0]) return 0;if(a.x[1]>t[k].ma[1]||b.x[1]<t[k].mi[1]) return 0;return 1;
}
int query(point a,point b,int u) {if(!u||!pd(a,b,u)) return 0;if(pd(a,b,u)==2) return t[u].siz;int ans=0;if(a.x[0]<=t[u].a.x[0]&&t[u].a.x[0]<=b.x[0]&&a.x[1]<=t[u].a.x[1]&&t[u].a.x[1]<=b.x[1]) ans++;ans+=query(a,b,t[u].ch[0]);ans+=query(a,b,t[u].ch[1]);return ans;
}
namespace seg {struct dsr_sb {int ch[2],rt;}t[N*30];int tot;void insert(int l,int r,int &u,point a,int val) {if(!u) u=++tot;insert(a,t[u].rt,0);if(l==r) return;int mid=(l+r)>>1;if(val<=mid) insert(l,mid,t[u].ch[0],a,val);else insert(mid+1,r,t[u].ch[1],a,val);}int ask(int l,int r,int u,point a,point b,int k) {if(l==r) return l;int mid=(l+r)>>1,tmp=query(a,b,t[t[u].ch[1]].rt);if(k>tmp) return ask(l,mid,t[u].ch[0],a,b,k-tmp);else return ask(mid+1,r,t[u].ch[1],a,b,k);}
}
int main() {int n=read(),q=read(),lastans=0,rt=0;n+=n;for(int i=1;i<=q;++i) {int opt=read(),k;point a,b;a.x[0]=read()^lastans,a.x[1]=read()^lastans;if(opt==1) {k=read()^lastans;seg::insert(1,1e9,rt,a,k);} else {b.x[0]=read()^lastans,b.x[1]=read()^lastans;k=read()^lastans;int tmp=query(a,b,seg::t[rt].rt);if(k>tmp) {puts("NAIVE!ORZzyz.");lastans=0;} else {lastans=seg::ask(1,1e9,rt,a,b,k);printf("%d\n",lastans);}}}return 0;
}

bzoj4605: 崂山白花蛇草水 权值线段树套KDtree相关推荐

  1. 崂山白花蛇草水 权值线段树套KDtree

    崂山白花蛇草水 权值线段树套KDtree Description 神犇Aleph在SDOI Round2前立了一个flag:如果进了省队,就现场直播喝崂山白花蛇草水.凭借着神犇Aleph的实 力,他轻 ...

  2. 【bzoj4605】崂山白花蛇草水 权值线段树套KD-tree

    题目描述 神犇Aleph在SDOI Round2前立了一个flag:如果进了省队,就现场直播喝崂山白花蛇草水.凭借着神犇Aleph的实力,他轻松地进了山东省省队,现在便是他履行诺言的时候了.蒟蒻Bob ...

  3. bzoj4605 崂山白花蛇草水 权值线段树套kd树

    Description Q次操作,要求资瓷 在(x,y)处放一个数字x 查询(x1,y1)到(x2,y2)矩形内第k大 Solution 非常裸的权值线段树套kd树,为了保证复杂度可以定期重构也可以平 ...

  4. 【BZOJ4605】崂山白花蛇草水 权值线段树+kd-tree

    [BZOJ4605]崂山白花蛇草水 Description 神犇Aleph在SDOI Round2前立了一个flag:如果进了省队,就现场直播喝崂山白花蛇草水.凭借着神犇Aleph的实力,他轻松地进了 ...

  5. BZOJ 4605 崂山白花蛇草水 权值线段树+K-D树

    Description 神犇Aleph在SDOI Round2前立了一个flag:如果进了省队,就现场直播喝崂山白花蛇草水.凭借着神犇Aleph的实 力,他轻松地进了山东省省队,现在便是他履行诺言的时 ...

  6. BZOJ 4605: 崂山白花蛇草水 树套树 权值线段树套kdtree

    4605: 崂山白花蛇草水 Time Limit: 80 Sec  Memory Limit: 512 MB Submit: 527  Solved: 153 [Submit][Status][Dis ...

  7. bzoj4605: 崂山白花蛇草水(权值线段树套k-dtree)

    题目 #include<bits/stdc++.h> using namespace std; #define mid (l+r>>1) const int N=100002, ...

  8. 刷题总结——序列操作(权值线段树套树状数组)

    题目: 题目描述 给出序列 a1,a2,-,an(0≤ai≤109),有关序列的两种操作. 1. ai(1≤i≤n)变成 x(0≤x≤109). 2. 求 al,al+1,-,ar(1≤l≤r≤n)第 ...

  9. 【BZOJ3110】【codevs1616】K大数查询,权值线段树套普通线段树

    Time:2016.05.09 Author:xiaoyimi 转载注明出处谢谢 传送门1 传送门2 思路: 之前没怎么接触过权值线段树(非主席树),这次就当学习了一下吧.一开始还把题意理解错了,我的 ...

最新文章

  1. 遇java.lang.OutOfMemoryError: PermGen space之解决方案
  2. ConnectivityManager详解
  3. Django models的诡异异常RelatedObjectDoesNotExist
  4. 零基础学Python:函数的参数详解
  5. python创建线程
  6. 《Linux内核设计与实现》读书笔记(十)- 内核同步方法
  7. Horspool 字符串快速查找算法
  8. java.lang.NoClassDefFoundError:如何解决–第3部分
  9. Python类与对象实验
  10. 不同类型特征变量之间相关性分析
  11. 【NLP基础】信息抽取(Information Extraction:NER(命名实体识别),关系抽取)
  12. MySQL中 char和varchar的区别
  13. import itchat ModuleNotFoundError: No module named 'itchat'
  14. python语言实现指纹识别_Python语言之指纹识别是目前最成熟的识别技术!Python能分分钟做出一个来!...
  15. 安装Office2007时出现1706错误的解决方案
  16. Lenovo UEFI引导U盘 System x Install Windows Server 2016 R2
  17. 想做电商没产品?四个选品方向,让你进入电商行业
  18. 类和对象的概述及二者之间的关系
  19. Stunnel 编译及使用
  20. 2007年国民金融知识答题活动试题及答案(转)

热门文章

  1. 绝地求生登录计算机需要授权,绝地求生计算机授权收不到怎么办 | 手游网游页游攻略大全...
  2. 计算机网络 研究生复试考前最终版
  3. sqlite数据库下载安装和初步操作和所遇到的问题near sqlite3:syntax error
  4. 关系的性质判断(自反,对称,传递)
  5. 你是否愿意用华为鸿蒙系统,如果华为改用自研的“鸿蒙”系统,你是否愿意尝试?...
  6. linux中ext3多重索引的原理,Ext3日志原理
  7. C++ 高效编程:pass-by-value(值传递)与pass-by-reference(引用传递)
  8. PTA(每日一题)7-66 分解素因子
  9. c语言画笔的使用方法,新手必看:Photoshop笔刷画笔工具基本使用教程
  10. Windows 平台部署前后端分离项目