LOJ517 計算幾何瞎暴力

2022-09-10 13:48:33 字數 987 閱讀 6431

題目傳送門

分析:沒有操作4怎麼做?

暴力維護陣列,加入就暴力加入,對於這些數維護二進位制下每一位1的個數的字首和,全域性異或打乙個標記,查詢的時候按位字首和作差就好了

現在有了操作4怎麼做?

發現如果乙個字首已經排好了序,這個字首內部的順序就不再會被打亂了,考慮使用trie維護這個字首

對trie也打乙個異或標記,求字首和在trie上向下找的時候考慮一下這個異或標記再決定向左向右

同樣也可以在每個節點維護經過這個節點的路徑代表的數二進位制下每一位1的個數的和,查詢時直接返回所有做貢獻節點的和就好了

注意到最底端可能出現多個數字在乙個節點的情況,注意特判

現在我們trie和陣列結合使用

每次加入數時暴力加入陣列,要排序時再把陣列裡面的數加入trie中,陣列清空

每個數進一次陣列且最多出一次陣列,複雜度\(o(nlog^2a)\)

平方是因為我每個節點都維護了每一位的和,不清楚怎麼優雅\(o(nloga)\)

#include#include#include#include#include#include#include#include#include#define maxn 100005

#define inf 0x3f3f3f3f

using namespace std;

inline int getint()

int n,m;

int a[maxn],sum[maxn][30],n;

int ch[maxn<<5][2],sz[maxn<<5],sum[maxn<<5][30];

int rt,tot,tag,sz,tag;

inline void insert(int x)

inline long long query(int x)

{ long long ans=0;

for(int i=0;i<30;i++)

if(tag&(1<

loj517 計算幾何瞎暴力

在序列上維護4個操作 1.在序列的尾端新增x 2.輸出al ar的和 3.將所有數異或x 4.將序列從小到大排序 第一眼看上去是splay於是頭鐵硬剛了一發 後來發現splay沒法異或 然後看到了trie樹 學習了乙個 1.直接插到序列裡 2.考慮字首和 因為trie樹所管轄的下標區間是有序的,所以...

計算幾何你瞎暴力 玲瓏oj C語言

problem description 今天h考完了期末考試,他在教學樓裡閒逛,他看著教學樓裡一間間的教室,於是開始思考 如果從乙個座標為 x1,y1,z1 的教室走到 x2,y2,z2 的距離為 x1 x2 y1 y2 z1 z2 那麼有多少對教室之間的距離是不超過r的呢?input 第一行是乙個...

玲瓏杯1143 計算幾何你瞎暴力

1143 計算幾何你瞎暴力 time limit 5s memory limit 256mbyte submissions 1735solved 341 description 今天 hhhh考完了期末考試,他在教學樓裡閒逛,他看著教學樓裡一間間的教室,於是開始思考 如果從乙個座標為 x 1,y1 ...