一個二維線段樹的簡單題,開始直接更新到了每一個節點,結果悲劇超時,想想也是,肯定會TLE
其實不用跟新每個節點,只用更新到那條線段,然後每次詢問的時候也只用只用res^矩形的狀態
/* * File: main.cpp * Author: Mi * * Created on 2011年3月30日, 下午2:55 */ #include <cstdlib> #include <stdio.h> #include <algorithm> #define N 1005 using namespace std; /* * */ int res; struct tree_y { int l,r,d; int mid() { return (l+r)>>1; } }; struct tree_x { int l,r; tree_y Y[N*4]; int mid() { return (l+r)>>1; } }X[N*4]; void build_y(tree_x &x,int l,int r,int root) { x.Y[root].l=l; x.Y[root].r=r; x.Y[root].d=0; if(l==r) return ; int mid=x.Y[root].mid(); build_y(x,l,mid,root<<1); build_y(x,mid+1,r,root<<1|1); } void build_x(int l,int r,int root) { build_y(X[root],1,1000,1); X[root].l=l; X[root].r=r; if(l==r) return ; int mid=X[root].mid(); build_x(l,mid,root<<1); build_x(mid+1,r,root<<1|1); } void modify_y(tree_x &x,int yl,int yr,int root) { if(x.Y[root].l==yl&&x.Y[root].r==yr) { x.Y[root].d^=1; return ; } int mid=x.Y[root].mid(); if(yr<=mid) modify_y(x,yl,yr,root<<1); else if(yl>=mid+1) modify_y(x,yl,yr,root<<1|1); else { modify_y(x,yl,mid,root<<1); modify_y(x,mid+1,yr,root<<1|1); } } void modify_x(int xl,int xr,int yl,int yr,int root) { if(X[root].l==xl&&X[root].r==xr) { modify_y(X[root],yl,yr,1); return ; } int mid=X[root].mid(); if(xr<=mid) modify_x(xl,xr,yl,yr,root<<1); else if(xl>=mid+1) modify_x(xl,xr,yl,yr,root<<1|1); else { modify_x(xl,mid,yl,yr,root<<1); modify_x(mid+1,xr,yl,yr,root<<1|1); } } void query_y(tree_x &x,int y,int root) { res^=x.Y[root].d; if(x.Y[root].l==x.Y[root].r) return ; int mid=x.Y[root].mid(); if(y<=mid) query_y(x,y,root<<1); else query_y(x,y,root<<1|1); } void query_x(int x,int y,int root) { query_y(X[root],y,1); if(X[root].l==X[root].r) return ; int mid=X[root].mid(); if(x<=mid) query_x(x,y,root<<1); else query_x(x,y,root<<1|1); } int main(int argc, char** argv) { int t,n,q; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&q); build_x(1,n,1); while(q--) { char str[2]; scanf("%s",str); if(str[0]=='C') { int xl,yl,xr,yr; scanf("%d%d%d%d",&xl,&yl,&xr,&yr); modify_x(xl,xr,yl,yr,1); } else { res=0; int x,y; scanf("%d%d",&x,&y); query_x(x,y,1); printf("%d/n",res); } } puts(""); } return 0; }
二叉樹 「二叉樹 binary tree」是一種非線性數據結構,代表“祖先”與“後代”之間的派生關係,體現了“一分爲二” 的分治邏輯。與鏈表類似,二叉樹的基本單元是節點,每個節點包含值、左子節點引用和右子節點引用。 每個節點都有兩個引
本文分享自華爲雲社區《從原始邊列表到鄰接矩陣Python實現圖數據處理的完整指南》,作者: 檸檬味擁抱。 在圖論和網絡分析中,圖是一種非常重要的數據結構,它由節點(或頂點)和連接這些節點的邊組成。在Python中,我們可以使用鄰接矩陣來表示
千帆AppBuilder的工作流編排功能上線後,爲了讓用戶能夠更快地熟悉操作,我們請到了AppBuilder的產品經理爲大家直播講解。 在這次直播中,PM小姐姐深入介紹並演示了工作流編排功能,通過創建多個組件,生動展示了AppBui
前言 linux下安裝nginx比較繁瑣,遇到內網部署環境更是麻煩,所以研究了下nginx綠色免安裝版的部署包製作,開箱即用,特此記錄分享,一下操作在centos8環境下安裝,如果需要其他內核系統的安裝(Debian/Ubuntu等),請在
Xmake 是一個基於 Lua 的輕量級跨平臺構建工具。 它非常的輕量,沒有任何依賴,因爲它內置了 Lua 運行時。 它使用 xmake.lua 維護項目構建,相比 makefile/CMakeLists.txt,配置語法更加簡潔直觀,
作者:張添翼、董藝荃 引子 OpenAI 發佈了最新的 GPT-4o 模型,通義千問也在前不久剛發佈通義千問 2.5,已經和 GPT-4-Turbo 不分伯仲: 既然目前還沒有和 GPT-4o 文本生成能力的對比數據,就讓我們來和大模型一
原文:https://blog.fengjx.com/pages/d6f092 介紹 go-kit的分層設計可以看成是一個洋蔥,有許多層。這些層可以劃分爲我們的三個領域。 Service: 最內部的服務領域是基於你特定服務定義的,也是
原文:https://blog.fengjx.com/pages/40737e 介紹 go-kit 是一個微服務開發工具集,並不算一個完整的框架。根據工程實踐總結的一套開發規範,解決分佈式開發中的常見問題,它同樣也適用於單體服務開發。
1. 背景 ZooKeeper(ZK)是一個誕生於 2007 年的分佈式應用程序協調服務。儘管出於一些特殊的歷史原因,許多業務場景仍然不得不依賴它。比如,Kafka、任務調度等。特別是在 Flink 混合部署 ETCD 解耦 時,業務方曾
本文分享自華爲雲社區《【MySQL技術專欄】GaussDB(for MySQL) Big IN查詢優化》,作者:GaussDB 數據庫。 背景介紹 在生產環境中,經常會遇到客戶業務的SQL語句進行過濾查詢
1. 以管理員身份運行命令提示符並執行命令 cmd ----------------->chcp 437 2. 該命令將返回損壞的任務計劃程序名稱. 輸入命令: schtasks /query /v | find /i "ERROR:
作者:Bruce 背景 今天分享的案例來自於得物技術團隊應用 MSE-ZooKeeper 過程中的最佳實踐。原文得物 ZooKeeper SLA 也可以 99.99% | 得物技術。 ZooKeeper(ZK)是一個誕生於 2007 年的分
現狀分析: 首屏速度是用戶體驗的最關鍵一環,而首屏速度最大的決定性因素就是資源的加載速度,資源加載速度等於資源大小 + 網速,老的前端項目隨着不斷增長,代碼可能會變得混亂,冗餘難以理解,不斷的做加法,久而久之,前端性能上就會受到影響,
一、文件屬性 下文中,“文件”一詞默認代指廣義的數據類型,跟“目錄”等詞對比使用時,則專指普通文件(File)這一特定數據類型。 Linux系統中,我們可以使用命令“ls -al”來查看當前目錄
要將Git中的一個文件恢復到之前的版本,你可以使用git checkout命令結合特定的提交哈希值(commit hash)或引用(如HEAD~1)來檢出該文件的特定版本。 以下是如何操作的步驟: 查看文件的歷史: 首先,你可以使用gi