BZOJ 4066 簡單題 ——KD-Tree套替罪羊樹

【題目分析】

? ? 直接x,y二維輪番劃分,暴力即可。

? ? 套上替罪羊,打碎重構,對于時間復雜度有了保證。

? ? 寫起來好麻煩,重構的技巧很棒!

【代碼】

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;#define maxn 200005
#define inf 0x3f3f3f3f
#define lim 0.7
#define L t[o].c[0]
#define R t[o].c[1]
#define mid (l+r>>1)
#define F(i,j,k) for (int i=j;i<=k;++i)struct node{int d[2],c[2];int mx[2],mn[2],sum,v,siz,D;int& operator [] (int x){return d[x];}
}t[maxn],now;
int p[maxn];
int opt=0,D,rt=0,ans=0,tot=0,cnt;
inline bool cmp(int x,int y){return t[x][D]<t[y][D];}
void pushup(int k)
{for (int i=0;i<2;++i){t[k].mn[i]=min(t[t[k].c[0]].mn[i],min(t[t[k].c[1]].mn[i],t[k].mn[i]));t[k].mx[i]=max(t[t[k].c[0]].mx[i],max(t[t[k].c[1]].mx[i],t[k].mx[i]));}t[k].sum=t[t[k].c[0]].sum+t[t[k].c[1]].sum+t[k].v;t[k].siz=t[t[k].c[0]].siz+t[t[k].c[1]].siz+1;
}
inline int build(int l,int r,int dir){D=dir;nth_element(p+l,p+mid,p+r+1,cmp);int o=p[mid];t[o].D=dir;F(i,0,1) t[o].mn[i]=t[o].mx[i]=t[o][i];t[o].sum=t[o].v;L=l<mid ? build(l,mid-1,dir^1) : 0;R=mid<r ? build(mid+1,r,dir^1) : 0;pushup(o);return o;
}
inline void dfs(int o){if (!o) return;dfs(L);p[++cnt]=o;dfs(R);
}
inline void rebuild(int &o){cnt=0;dfs(o);o=build(1,cnt,t[o].D);
}void ins(int &o,int dir)
{if (!o){o=++tot;t[o]=now;for (int i=0;i<2;++i) t[o].mn[i]=t[o].mx[i]=t[o].d[i];t[o].siz=1;t[o].D=dir;t[o].sum=t[o].v;return ;}if (now.d[dir]<t[o].d[dir]){ins(t[o].c[0],dir^1);pushup(o);if ((double)t[t[o].c[0]].siz>(double)t[o].siz*lim) rebuild(o);}else{ins(t[o].c[1],dir^1);pushup(o);if ((double)t[t[o].c[1]].siz>(double)t[o].siz*lim) rebuild(o);}
}void print(int o){if (!o) return;printf("%d t[o].mn[0]=%d t[o].mn[1]=%d t[o].mx[0]=%d t[o].mx[1]=%d\n",o,t[o].mn[0],t[o].mn[1],t[o].mx[0],t[o].mx[1]);print(L);print(R);
}int query(int o,int x1,int y1,int x2,int y2)
{if (!o) return 0;if (t[o].mn[0]>=x1 && t[o].mn[1]>=y1 && t[o].mx[0]<=x2 && t[o].mx[1]<=y2)return t[o].sum;else{int ret=0;if (t[o].d[0]>=x1&&t[o].d[0]<=x2&&t[o].d[1]>=y1&&t[o].d[1]<=y2)ret+=t[o].v;if (t[t[o].c[0]].mn[0]>x2||t[t[o].c[0]].mx[0]<x1||t[t[o].c[0]].mn[1]>y2||t[t[o].c[0]].mx[1]<y1);else ret+=query(t[o].c[0],x1,y1,x2,y2);if (t[t[o].c[1]].mn[0]>x2||t[t[o].c[1]].mx[0]<x1||t[t[o].c[1]].mn[1]>y2||t[t[o].c[1]].mx[1]<y1);else ret+=query(t[o].c[1],x1,y1,x2,y2);return ret;}
}int main()
{for (int i=0;i<2;++i) t[rt].mx[i]=-inf,t[rt].mn[i]=inf;t[rt].siz=t[rt].sum=t[rt].v=0; scanf("%*d");while (scanf("%d",&opt)!=EOF&&opt!=3){if (opt==1){scanf("%d%d%d",&now.d[0],&now.d[1],&now.v);now.d[0]^=ans; now.d[1]^=ans; now.v^=ans;ins(rt,1);}else{int x1,y1,x2,y2;scanf("%d%d%d%d",&x1,&y1,&x2,&y2);x1^=ans;y1^=ans;x2^=ans;y2^=ans;printf("%d\n",ans=query(rt,x1,y1,x2,y2));}}
}

  

轉載于:https://www.cnblogs.com/SfailSth/p/6231276.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259845.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259845.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259845.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【HTML5初探之繪制圖像(上)】看我canvas元素引領下一代web頁面

弧度一塊可能有誤&#xff0c;需要再研究 導航 【初探HTML5之使用新標簽布局】用html5布局我的博客頁&#xff01; 【HTML5初探之form標簽】解放表單驗證、增加文件上傳、集成拖放 【HTML5初探之繪制圖像&#xff08;上&#xff09;】看我canvas元素引領下一代web頁面 【HTML5初…

或運算

邏輯或 ||int i, j, k;i 0x15;j 0x41;k i || j;反匯編代碼如下:MOV DWORD PTR SS:[EBP-4], 15MOV DWORD PTR SS:[EBP-C], 41CMP DWORD PTR SS:[EBP-4], 0JNZ SHORT asm_OR.00401029CMP DWORD PTR SS:[EBP-C], 0JNZ SHORT asm_OR.00401029MOV DWORD PTR SS:[EBP-10], 0JMP SH…

構造方法的調用順序和成員變量的初始化時機以及動態綁定

構造方法的調用順序&#xff1a;子類構造器中&#xff0c;JVM會自動的先調用父類的構造方法&#xff0c;然后再執行子類構造方法。在JVM自動調用父類構造方法的時候&#xff0c;會完成父類中擁有的成員變量的值的初始化操作&#xff0c;此時子類的成員變量并未初始化&#xff0…

Python interview_python

https://github.com/taizilongxu/interview_python 1 Python的函數參數傳遞 strings, tuples, 和numbers是不可更改的對象&#xff0c;而list,dict等則是可以修改的對象 2 Python中的元類(metaclass) 3 staticmethod和classmethod python 三個方法&#xff0c;靜態方法&#xf…

突然不能 ip訪問服務器文件夾,用友U8 工作站連接不到服務器,ping IP及服務器名都正常,訪問服務器共享文件夾也正常...

用友U8 U8存貨采購入庫單存貨現存量與存貨核算中的明細帳數量不符用友U8 U8存貨采購入庫單存貨現存量與存貨核算中的明細帳數量不符問題原因:錯誤原因見下面解決方案中的分析。解決方法:在查詢存貨明細帳和現存量09倉庫存貨510241數量為123&#xff0c;但在添采購入庫單紅字時卻…

rocketmq 消息 自定義_RocketMQ消息軌跡-設計篇

RocketMQ 消息軌跡主要包含兩篇文章&#xff1a;設計篇與源碼分析篇&#xff0c;本節將詳細介紹RocketMQ消息軌跡-設計相關。RocketMQ消息軌跡&#xff0c;主要跟蹤消息發送、消息消費的軌跡&#xff0c;即詳細記錄消息各個處理環節的日志&#xff0c;從設計上至少需要解決如下…

再次獻給那些心軟的人!!!

上次那篇日志朋友看了評論說&#xff1a;別太悲觀……為那些壞人成為壞人才是最不值得的&#xff01;而且好人說要當壞人就只是說說而已&#xff0c;真碰到啥事&#xff0c;依舊會傻傻的幫……沒錯&#xff0c;我還是傻傻的幫了&#xff0c;最初會表現出一點不樂意&#xff0c;…

手機做服務器性能咋樣,服務器性能不足 怎樣才能逼出最強狀態

而且&#xff0c;服務器的節能不僅僅意味著節省了電費&#xff0c;其后續的散熱降溫等工作都可以得到更好的節約。同時&#xff0c;服務器的在長時間工作的情況下&#xff0c;保持較低溫度有利于降低其承載負荷&#xff0c;最大限度發揮其能力&#xff0c;保障服務器工作運行的…

ASP.NET跨頁面傳值技巧總結

1. 使用QueryString變量 QueryString是一種非常簡單的傳值方式&#xff0c;他可以將傳送的值顯示在瀏覽器的地址欄中。如果是傳遞一個或多個安全性要求不高或是結構簡單的數值時&#xff0c;可以使用這個方法。但是對于傳遞數組或對象的話&#xff0c;就不能用這個方法了。下面…

RTMP協議中文翻譯(首發)(轉)

Adobe公司的實時消息傳輸協議 摘要 此備忘錄描述了 Adobe公司的實時消息傳輸協議(RTMP)&#xff0c;此協議從屬于應用層&#xff0c;被設計用來在適合的傳輸協議&#xff08;如TCP&#xff09;上復用和打包多媒體傳輸流&#xff08;如音頻、視頻和互動內容&#xff09;。 目錄 …

關卡 動畫 藍圖 運行_UE4入門之路(基礎藍圖篇):藍圖的制作

藍圖系統簡介藍圖系統是UE4中十分有代表性的一個特點&#xff0c;所謂藍圖就是一種可視化的腳本。該系統非常靈活且非常強大&#xff0c;因為它為設計人員提供了一般僅供程序員使用的所有概念及工具。 程序員能夠很方便的創建一個基礎系統&#xff0c;并交給策劃進一步在藍圖中…

overfitting(過度擬合)的概念

來自&#xff1a;http://blog.csdn.net/fengzhe0411/article/details/7165549 最近幾天在看模式識別方面的資料&#xff0c;多次遇到“overfitting”這個概念&#xff0c;最終覺得以下解釋比較容易接受&#xff0c;就拿出來分享下。 overfittingt是這樣一種現象&#xff1a;一個…

虛擬串口服務器zenetmanager,Avocent服務器/串口管理 KVM

MergePoint Unity交換機在單個設備中結合了 KVM over IP和串行控制臺管理技術。這項獨特的結合為IT管理員提供了用于訪問和控制服務器、網絡設備及其他數據中心和分支辦公室設備的完整遠程管理解決方案。MergePoint Unity交換機直接與物理KVM、USB和串行端口進行安全的遠程帶外…

KAFKA分布式消息系統

Kafka[1]是linkedin用于日志處理的分布式消息隊列&#xff0c;linkedin的日志數據容量大&#xff0c;但對可靠性要求不高&#xff0c;其日志數據主要包括用戶行為&#xff08;登錄、瀏覽、點擊、分享、喜歡&#xff09;以及系統運行日志&#xff08;CPU、內存、磁盤、網絡、系統…

jar打包 剔除第三方依賴以及它的依賴_面試官:為什么Spring Boot的jar可以直接運行?...

來源&#xff1a;Gormats Notesfangjian0423.github.io/2017/05/31/springboot-executable-jar/Spring Boot Loader抽象的一些類JarLauncher的執行過程關于自定義的類加載器LaunchedURLClassLoaderSpring Boot Loader的作用SpringBoot提供了一個插件spring-boot-maven-plugin用…

CQRS架構圖

2019獨角獸企業重金招聘Python工程師標準>>> 轉載于:https://my.oschina.net/darkness/blog/814243

SQLite中不支持的sql語法

今天很自然的在寫Sql語句的時候用了Top&#xff0c;一開始沒發現問題&#xff0c;因為我從數據庫讀出的值正好是0&#xff0c;而我習慣變量定義的時候也都賦值0&#xff0c;可是到我不要0的時候我就發現問題了。后來才知道&#xff0c;可愛的小sqlite竟然有不支持的sql語法。 看…

Analyzer普通用戶登錄不了[從網絡訪問此計算機]

問題&#xff1a; 最近客戶諾奇反映說Analyzer普通用戶登錄不了&#xff0c;但是發現管理員又可以登錄&#xff0c;幾經周折發現原來是系統的本地安全策略設置了不讓遠程使用本地賬戶密碼登錄系統導致。解決方案&#xff1a; 修改本地安全策略的“從遠程訪問此計算機”中的用戶…

金蝶系統服務器要求,金蝶服務器安裝及其相關要求.doc

K/3WISE創新管理平臺 V12.2標準部署環境說明目錄1. 多語言部署規則21.1 客戶端多語言部署規則21.2 中間層多語言部署規則31.3 數據庫多語言部署規則31.4 人力資源、管理門戶、CRM多語言部署規則41.5 Citrix遠程接入多語言部署規則42. 多語言部署架構圖52.1 簡體中間層52.2 繁體…

源碼 移植_FreeModbus移植總結

modbus是一項工業上經常用到的通訊協議&#xff0c;而freemodbus是一款開源的從機協議棧。關于它的移植網上已經有了很多的文章&#xff0c;但是大多都只是針對其中部分問題的表述。本文將會把自己在移植freemodbus過程中遇到的問題以及freemodbus的源碼分析盡量表述清楚。&…