loj517 計算幾何瞎暴力

2022-05-22 22:33:09 字數 1651 閱讀 3405

在序列上維護4個操作

1.在序列的尾端新增x

2.輸出al~ar的和

3.將所有數異或x

4.將序列從小到大排序

第一眼看上去是splay於是頭鐵硬剛了一發

後來發現splay沒法異或

然後看到了trie樹  學習了乙個

1.直接插到序列裡

2.考慮字首和  因為trie樹所管轄的下標區間是有序的,所以這裡相當於求trie樹中最小的x個數的,記一下每個點下面數字個數(sz)就可以了

3.考慮整體打乙個xortag 對於當前存在的xortag 我們將它的每一位分解到trie樹上跑,如果xortag某一位為1,那麼其實相當於該位置的左兒子比右兒子大 處理一下即可

4.把序列插到trie樹里

然後瞎暴力/滑稽

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

#define pi 3.14

#define eps 1e-9

#define inf 2147483233

#define m(a) memset(a,0,sizeof(a))

#define m(a) memset(a,127,sizeof(a))

#define rep(i,m,n) for(int i=1;i<=n;i++)

#define dwn(i,n,m) for(int i=n;i>=1;i++)

#define lowbit(x) x&(-x)

#define poj(n) while(~scanf("%d",&n) && n)

using

namespace

std;

const

int maxn=1e5,maxh=30

;int

xortag,n,m;

struct

trie

}long

long getsum(int

x)

long

long query(int

x)

}ans+=getsum(u)/sz[u]*x;

return

ans;

}intgetsize()

}trie;

struct

array

long

long query(int

x)

void

transfer()

}array;

long

long query(int

x)int

main()

scanf("%d

",&m);

for(int i=1;i<=m;++i)

if(op==2

)

if(op==3

)

if(op==4

) array.transfer();

}return0;

}

LOJ517 計算幾何瞎暴力

題目傳送門 分析 沒有操作4怎麼做?暴力維護陣列,加入就暴力加入,對於這些數維護二進位制下每一位1的個數的字首和,全域性異或打乙個標記,查詢的時候按位字首和作差就好了 現在有了操作4怎麼做?發現如果乙個字首已經排好了序,這個字首內部的順序就不再會被打亂了,考慮使用trie維護這個字首 對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 ...