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=5005;
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=1; x=0;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;
}int main() {//freopen("1.in","w",stdout);srand(time(0));int n=10,m=rand()%100+1;printf("%d %d\n",n,m);For(i,1,m) {int o;o=rand()%2+1;//if(i<=m/2) o=1; else o=2;if(i<=5) {int x=rand()%n+1,y=rand()%n+1,v=rand()%10+1;printf("1 %d %d %d\n",x,y,v);}    else {int xl,yl,xr,yr,k;xl=rand()%n+1,xr=rand()%n+1;yl=rand()%n+1,yr=rand()%n+1;if(xl>xr) swap(xl,xr);if(yl>yr) swap(yl,yr);k=rand()%n+1;printf("2 %d %d %d %d %d\n",xl,yl,xr,yr,k);}}Formylove;
}

View Code

转载于:https://www.cnblogs.com/Achenchen/p/10410811.html

luogu P4848 崂山白花蛇草水相关推荐

  1. P4848 崂山白花蛇草水

    题面 • 平面是二维的,第 K 大是相对的. • 单纯的 K- D 似乎并不能解决(反正我不会). • 第 K 大和二分是紧密相关的. • 二分之后的判定就是一个二维数点问题. • 所以我们可以线段树 ...

  2. 崂山白花蛇草水:旧款变爆款老字号“有预谋”

    当崂山矿泉水官方微博发文称,崂山矿泉水响应国家一带一路的号召进驻利比里亚了,两张配图却让网友大惊失色:这不就是传说中的中国最难喝的饮料--崂山白花蛇草水?紧接着,"最难喝饮料Top5&quo ...

  3. bzoj 4605 崂山白花蛇草水

    http://www.elijahqi.win/archives/3722 Description 神犇Aleph在SDOI Round2前立了一个flag:如果进了省队,就现场直播喝崂山白花蛇草水. ...

  4. BZOJ4605:崂山白花蛇草水

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

  5. [bzoj4605]崂山白花蛇草水 k-d tree 带替罪羊重构

    4605: 崂山白花蛇草水 Time Limit: 80 Sec  Memory Limit: 512 MB [Submit][Status][Discuss] Description 神犇Aleph ...

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

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

  7. 【线段树套KD树】[BZOJ4605]崂山白花蛇草水

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

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

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

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

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

最新文章

  1. 面试题: 难点 已看1
  2. vscode php调试插件,构建VSCode开发调试环境(强大且实用的插件推荐)
  3. how about one resource file has two different methods both annotated with @Post
  4. 【差分】Tallest Cow(poj 3263/luogu 2879)
  5. 自动配置jdk_JDK 15中自动自动发送更好的NullPointerException消息
  6. DZ论坛系统 UC_KEY拿webshell
  7. java treemap_Java TreeMap firstEntry()方法及示例
  8. mysql默认密码是多少_路由器192.168.1.1默认登录密码是多少?
  9. Java学习日报—2021/11/18
  10. 95-38-050-Buffer-UnpooledHeapByteBuf
  11. Skara 是研究JDK源代码的工具
  12. 二、Python开发语音识别
  13. Node:根据开发环境配置axios默认路径
  14. 一个注册表操作类,很有用!
  15. (附源码)springboot家庭装修管理系统 毕业设计 613205
  16. python学习手册(1)
  17. 电脑中病毒了一直下载安装软件怎么办?
  18. 【6】python生成数据曲线平滑处理——(Savitzky-Golay 滤波器、convolve滑动平均滤波)方法介绍,推荐玩强化学习的小伙伴收藏
  19. XP盗版问题解决方案
  20. 操作系统饥饿现象_操作系统

热门文章

  1. asp mysql查询_asp的 条件查询
  2. 牛客网试题+答案分析+大牛面试经验(12)
  3. NVMe1.4 Admin Command 学习(3)-- fw commit sanitize
  4. Java后端笔记 _Static关键字
  5. cocos做飞机大战笔记【玩家飞机移动与子弹发射】
  6. GVS视声引入睿住资本,完成A轮融资
  7. flash读写导致死机问题分析
  8. Ebc编码与asc编码转换
  9. 2020年11月份某kh比赛部分CTF赛题求大佬解题思路
  10. 寒假刷题13: Anu Has a Function Codeforces Round #618 (Div. 2) C