很久很久以前,在遙遠的大陸上有乙個美麗的國家。統治著這個美麗國家的國王是乙個園藝愛好者,在他的****裡種植著各種奇花異草。有一天國王漫步在花園裡,若有所思,他問乙個園丁道: 「最近我在思索乙個問題,如果我們把花壇擺成六個六角形,那麼……」 「那麼本質上它是乙個深度優先搜尋,陛下」,園丁深深地向國王鞠了一躬。 「嗯……我聽說有一種怪物叫九頭蛇,它非常貪吃蘋果樹……」 「是的,顯然這是一道經典的動態規劃題,早在n元2023年我們就已經發現了其中的奧秘了,陛下」。 「該死的,你究竟是什麼來頭?」 「陛下息怒,幹我們的這行經常莫名其妙地被問到和oi有關的題目,我也是為了預防萬一啊!」 王者的尊嚴受到了傷害,這是不可容忍的。看來一般的難題是難不倒這位園丁的,國王最後打算用車輪戰來消耗他的實力: 「年輕人,在我的花園裡的每一棵樹可以用乙個整數座標來表示,一會兒,我的騎士們會來輪番詢問你某乙個矩陣內有多少樹,如果你不能立即答對,你就準備走人吧!」說完,國王氣呼呼地先走了。 這下輪到園丁傻眼了,他沒有準備過這樣的問題。所幸的是,作為「全國園丁保護聯盟」的會長——你,可以成為他的最後一根救命稻草。可以用cdq分治的板子,其實就是乙個二維偏序問題。input
第一行有兩個整數n,m(0≤n≤500000,1≤m≤500000)。n代表****的樹木的總數,m代表騎士們詢問的次數。 檔案接下來的n行,每行都有兩個整數xi,yi,代表第i棵樹的座標(0≤xi,yi≤10000000)。 檔案的最後m行,每行都有四個整數aj,bj,cj,dj,表示第j次詢問,其中所問的矩形以(aj,bj)為左下座標,以(cj,dj)為右上座標。
output
共輸出m行,每行乙個整數,即回答國王以(aj,bj)和(cj,dj)為界的矩形裡有多少棵樹。
#include
using namespace std;
#define lowbit(x) x&(-x)
const
int n =
5e5+5;
struct node
}order[n*5]
, tmp[n*5]
;int len, n, m, toplimit =-1
;int ans[n]
, sum[
10000100];
void
update
(int x,
int val)
}int
query
(int x)
return res;
}void
sum_clear
(int x)
}void
cdq(
int l,
int r)
else
}while
(q <= r)
for(
int i = l; i < p; i++
)while
(p <= mid) tmp[cnt++
]= order[p++];
for(
int i = l; i <= r; i++
) order[i]
= tmp[i]
;// cout<}
void
addnode
(int x,
int y,
int tp,
int val)
intmain()
for(
int i =
1; i <= m; i++
)cdq(1
, len)
;for
(int i =
1; i <= m; i++
)printf
("%d\n"
, ans[i]);
}return0;
}
1935 查詢學生資訊
時間限制 1 sec 記憶體限制 32 mb 提交 1546 解決 347 提交 狀態 討論版 命題人 外部匯入 輸入n個學生的資訊,然後進行查詢。輸入的第一行為n,即學生的個數 n 1000 接下來的n行包括n個學生的資訊,資訊格式如下 01 李江 男 21 02 劉唐 男 23 03 張軍 男 ...
bzoj 1935(樹狀陣列)
傳送門 題解 由於是靜態問題所以可以離線處理,所有點 詢問拆成4個 按x排序,二維可以轉成一維,相當於每次query到的就是當前已插入的點,而只有這些點能對query的返回值造成貢獻。p.s.對於x座標相同的插入 詢問,要考慮這幾個操作的先後順序 include using namespace st...
poj 1935 搜尋 回溯
解題思路 先我們考慮從源點出發到所有自己想要經過的點然後在回到源點sum,顯然每條邊都必須經過源點 這個我們可以一次dfs求出 但題目的意思是可以不用回到源點,那麼我們可以再求源點到所有要經過的點的最遠距離ans,於是答案便是sum ans.這道題的思路確實是很巧妙,一開始我還是在想如何表示從某一點...