一个二维线段树的简单题,开始直接更新到了每一个节点,结果悲剧超时,想想也是,肯定会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」是一種非線性數據結構,代表“祖先”與“後代”之間的派生關係,體現了“一分爲二” 的分治邏輯。與鏈表類似,二叉樹的基本單元是節點,每個節點包含值、左子節點引用和右子節點引用。 每個節點都有兩個引
千帆AppBuilder的工作流編排功能上線後,爲了讓用戶能夠更快地熟悉操作,我們請到了AppBuilder的產品經理爲大家直播講解。 在這次直播中,PM小姐姐深入介紹並演示了工作流編排功能,通過創建多個組件,生動展示了AppBui
引言 隨着大數據時代的到來,網頁爬蟲作爲一種高效的數據收集工具,被廣泛應用於互聯網數據抓取和信息抽取。而知乎是一個知識分享平臺,擁有大量的用戶生成內容。通過爬蟲獲取知乎數據,企業和研究人員可以進行深入的數據分析和市場研究,瞭解用戶的需求
本文分享自華爲雲社區《【MySQL技術專欄】MySQL8.0直方圖介紹》,作者:GaussDB 數據庫。 背景 數據庫查詢優化器負責將SQL查詢轉換爲儘可能高效的執行計劃,但因爲數據環境不斷變化導致優化器對查詢數據瞭解的不夠充足,可能無法
本文分享自華爲雲社區《npm install -g 和 npm install --save-dev 的關係》,作者: SHQ5785。 一、npm install 本地安裝 將安裝包放在 ./node_modules 下(運行 npm
一、簡單介紹: CaffeineCache和Guava的Cache是應用廣泛的本地緩存。 在開發中,爲了達到降低依賴、提高訪問速度的目的。會使用它存儲一些維表接口的返回值和數據庫查詢結果,在有些場景下也會在分佈式緩存上再加上一層本地緩存,
本文分享自華爲雲社區《【昇騰開發全流程】AscendCL開發板模型推理》,作者:沉迷sk。 前言 學會如何安裝配置華爲雲ModelArts、開發板Atlas 200I DK A2。 並打通一個Ascend910訓練到Ascend310推理
大家好,我是每天分享AI應用的螢火君! 今天繼續給大家分享ComfyUI的入門必備技能:ControlNet。 ControlNet 提供了十幾種生成圖片的控制方式,有的可以控制畫面的結構,有的可以控制人物的姿勢,還有的可以控制圖片的畫
作者:張添翼、董藝荃 引子 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:
一、文件屬性 下文中,“文件”一詞默認代指廣義的數據類型,跟“目錄”等詞對比使用時,則專指普通文件(File)這一特定數據類型。 Linux系統中,我們可以使用命令“ls -al”來查看當前目錄