https://www.luogu.org/problemnew/show/P4848

我的数据结构大概已经废了。

外层权值线段树内层kdtree,外层线段树上二分答案。

码数据结构一时爽,码完debug火葬场。

要rebuild时少写了个else什么的

插入不upd下去的时候没把值更新完比如sz什么的

比较Int的时候把外层数组套多套少什么的

拿什么拯救你,我的数据结构

吸氧才能过的代码,据说没人能不吸氧过。

//Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=100007,UP=1e9;
typedef long long LL;
typedef double db;
using namespace std;
int n,q,lastans;
int xl,yl,xr,yr,Qrs; template<typename T> void read(T &x) {
char ch=getchar(); x=0; T f=1;
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='-') f=-1,ch=getchar();
for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;
} #define lc ch[x][0]
#define rc ch[x][1]
#define mid ((l+r)>>1) struct pt {
int d[2],v;
}p[N*33];
int rt[N*33],cnt,dt[N*33][2][2],ch[N*33][2],sz[N*33],f[N*33],D; void upd(int x) {
dt[x][0][0]=dt[x][0][1]=p[x].d[0];
dt[x][1][0]=dt[x][1][1]=p[x].d[1];
if(lc) {
dt[x][0][0]=min(dt[x][0][0],dt[lc][0][0]);
dt[x][0][1]=max(dt[x][0][1],dt[lc][0][1]);
dt[x][1][0]=min(dt[x][1][0],dt[lc][1][0]);
dt[x][1][1]=max(dt[x][1][1],dt[lc][1][1]);
}
if(rc) {
dt[x][0][0]=min(dt[x][0][0],dt[rc][0][0]);
dt[x][0][1]=max(dt[x][0][1],dt[rc][0][1]);
dt[x][1][0]=min(dt[x][1][0],dt[rc][1][0]);
dt[x][1][1]=max(dt[x][1][1],dt[rc][1][1]);
}
sz[x]=sz[lc]+sz[rc]+1;
} int sta[N],top;
void tra(int x) {
if(lc) tra(lc);
sta[++top]=x;
if(rc) tra(rc);
} bool cmp(const int &A,const int &B) { return p[A].d[D]<p[B].d[D]; } int build(int l,int r,int dd) {
D=dd;
if(l>r) return 0;
nth_element(sta+l,sta+mid,sta+r+1,cmp);
int x=sta[mid];
lc=build(l,mid-1,dd^1); if(lc) f[lc]=x;
rc=build(mid+1,r,dd^1); if(rc) f[rc]=x;
upd(x); return x;
} int rebuild(int x,int F,int dd) {
top=0; tra(x);
int rs=build(1,top,dd);
f[rs]=F; return rs;
} int bal(int x) { return sz[x]*0.85>=max(sz[lc],sz[rc]); } void insert(int &RT,pt A) {
int x=RT;
for(int fa=0,l=0,dd=0;;dd^=1) {
if(!x) {
x=++cnt; p[x]=A;
upd(x);
f[x]=fa;
if(fa) ch[fa][l]=x;
else RT=x;
break ;
}
dt[x][0][0]=min(dt[x][0][0],A.d[0]);
dt[x][0][1]=max(dt[x][0][1],A.d[0]);
dt[x][1][0]=min(dt[x][1][0],A.d[1]);
dt[x][1][1]=max(dt[x][1][1],A.d[1]); sz[x]++;
if(A.d[dd]<p[x].d[dd]) fa=x,x=lc,l=0;
else fa=x,x=rc,l=1;
}
int ls=-1,dd=0,lsd;
for(int tp=x;;tp=f[tp],dd^=1) {
if(!bal(tp)) ls=tp,lsd=dd;
if(tp==RT) break;
}
if(ls!=-1) {
if(ls==RT) RT=rebuild(ls,0,0);
else ch[f[ls]][ls==ch[f[ls]][1]]=rebuild(ls,f[ls],lsd^dd);
}
} void qry(int x) {
if(!x) return ;
if(dt[x][0][0]>xr||dt[x][0][1]<xl||dt[x][1][0]>yr||dt[x][1][1]<yl) return;
if(dt[x][0][0]>=xl&&dt[x][0][1]<=xr&&dt[x][1][0]>=yl&&dt[x][1][1]<=yr) {
Qrs+=sz[x]; return ;
}
if(p[x].d[0]>=xl&&p[x].d[0]<=xr&&p[x].d[1]>=yl&&p[x].d[1]<=yr) Qrs++;
if(lc) qry(lc); if(rc) qry(rc);
} int sgrt,tot,lson[N*33],rson[N*33];
void upd(int &x,int l,int r,int pos,pt A) {
if(!x) x=++tot; insert(rt[x],A);
if(l==r) return ;
if(pos<=mid) upd(lson[x],l,mid,pos,A);
else upd(rson[x],mid+1,r,pos,A);
} int qry(int x,int l,int r,int k) {
Qrs=0;
if(l==r) {
qry(rt[x]);
if(Qrs>=k) return l;
else return 0;
}
qry(rt[rson[x]]);
if(Qrs>=k) return qry(rson[x],mid+1,r,k);
else return qry(lson[x],l,mid,k-Qrs);
} int main() {
//freopen("4605.in","r",stdin);
//freopen("4605.out","w",stdout);
read(n); read(q);
For(i,1,q) {
int o;
read(o);
if(o==1) {
int x,y,v;
read(x); read(y); read(v);
x^=lastans; y^=lastans; v^=lastans;
upd(sgrt,1,UP,v,(pt){x,y,v});
}
else {
int k;
read(xl); read(yl); read(xr); read(yr);
xl^=lastans; yl^=lastans;
xr^=lastans; yr^=lastans;
read(k); k^=lastans;
lastans=qry(sgrt,1,UP,k);
if(!lastans) puts("NAIVE!ORZzyz.");
else printf("%d\n",lastans);
}
}
Formylove;
}
//Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=;
typedef long long LL;
typedef double db;
using namespace std;
int a[N][N]; template<typename T> void read(T &x) {
char ch=getchar(); T f=; x=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} int main() {
//freopen("1.in","w",stdout);
srand(time());
int n=,m=rand()%+;
printf("%d %d\n",n,m);
For(i,,m) {
int o;
o=rand()%+;
//if(i<=m/2) o=1; else o=2;
if(i<=) {
int x=rand()%n+,y=rand()%n+,v=rand()%+;
printf("1 %d %d %d\n",x,y,v);
}
else {
int xl,yl,xr,yr,k;
xl=rand()%n+,xr=rand()%n+;
yl=rand()%n+,yr=rand()%n+;
if(xl>xr) swap(xl,xr);
if(yl>yr) swap(yl,yr);
k=rand()%n+;
printf("2 %d %d %d %d %d\n",xl,yl,xr,yr,k);
}
}
Formylove;
}

luogu P4848 崂山白花蛇草水的更多相关文章

  1. 洛谷P4848 崂山白花蛇草水 权值线段树+KDtree

    题目描述 神犇 \(Aleph\) 在 \(SDOI\ Round2\) 前立了一个 \(flag\):如果进了省队,就现场直播喝崂山白花蛇草水.凭借着神犇 \(Aleph\) 的实力,他轻松地进了山 ...

  2. P4848 崂山白花蛇草水

    题意:支持修改的矩形第 \(k\) 大. 题解:动态开点权值线段树 套 Kd-tree. 然后也没什么难的但就是写不对...调了两天才调出来然后发现跑的巨慢,于是又%了一发Claris'题解,跑的真快 ...

  3. bzoj 4605: 崂山白花蛇草水

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

  4. LG4848 崂山白花蛇草水

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

  5. BZOJ4605:崂山白花蛇草水

    浅谈\(K-D\) \(Tree\):https://www.cnblogs.com/AKMer/p/10387266.html 题目传送门:https://lydsy.com/JudgeOnline ...

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

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

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

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

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

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

  9. bzoj4605: 崂山白花蛇草水 权值线段树套KDtree

    bzoj4605: 崂山白花蛇草水 链接 bzoj loj 思路 强制在线,那就权值线段树套KDtree好了,没啥好讲的. KDtree要加平衡因子来重构.另外,那水真难喝. 错误 树套树一边写过了, ...

随机推荐

  1. 设计模式之单例模式--instance

    <?php header('Content-Type:text/html;charest=utf-8'); /** * 设计模式之单例模式 * $_instance必须声明为静态的私有变量 * ...

  2. WEB网页专业词汇 汇总

    Accessibility  可访问性 accessor properties 存取器属性 addition 加法 aggregate 聚合 alphabetical order 字母表顺序 Anch ...

  3. javascript重置(base层)(。。。。不完整)

    1.nextSibling浏览器兼容问题 <ul> <li id="item1"></li> <li id="item2&quo ...

  4. Qt如何重写虚函数

    eg:QWidget的有个虚函数,KeyPressEvent,当它的子类获得焦点的时候,如果有任何按键按下,就会触发这个虚函数. 1.在mainwindow.h中声明此虚函数 protected:vo ...

  5. Go 字符串相关-标准库

    标准库中有四个包对字符串处理尤为重要: bytes strings strconv unicode strings包提供了许多如字符串的查询.替换.比较.截断.拆分和合并等功能. bytes包也提供了 ...

  6. Anaconda创建环境、删除环境、激活环境、退出环境

    Anaconda创建环境: //下面是创建python=3.6版本的环境,取名叫py36 conda create -n py36 python=3.6  删除环境(不要乱删啊啊啊) conda re ...

  7. mysql服务性能优化 my.cnf my.ini配置说明详解(16G内存)

    sort_buffer_size,join_buffer_size,read_buffer_size参数对应的分配内存也是每个连接独享 这配置已经优化的不错了,如果你的mysql没有什么特殊情况的话, ...

  8. linux基础(8)-文件处理(awk 、sed、grep)

    grep基本用法 格式:grep [选项] [模式] [文件]   选项: -c:只显示有多少行匹配 ,而不具体显示匹配的行 -n:在每一行前面打印该行在文件中的行数 -i:在字符串比较的时候忽略大小 ...

  9. Apache Phoenix的子查询

    Phoenix现在支持在WHERE 和FROM 中使用子查询.子查询可以被指定在很多地方,比如 IN/NOT IN, EXISTS/NOTEXISTS等. Subqueries with INor N ...

  10. 阿里云服务器windows server2008r2+tomcat8.0+nginx1.12

    弄了两天的nginx,从了解开始,可能是我理解能力太差了,惭愧惭愧!但是还好看了一些大神的文章总算有点眉目了,此篇用来当作自己的笔记,大家看不懂,勿喷,但是如果有问题,直接回复,我可以给你解答一下,前 ...