給n
nn個數的陣列a
aa,問有多少個三元組(x,
y,z)
(x,y,z)
(x,y,z
)滿足 a[x
]xor
a[y]
y]xo ra[z ]a[x] ~ xor ~ a[y] < a[y] ~ xor ~ a[z] a[x]xo ra[y ]y]xo ra[z ]並且1≤x < y n1\leq x < y < z \leq n 1≤x< yn n ≤50000,1 ≤a[i ]≤10 9n \leq 50000 ,1 \leq a[i] \leq 10^9 n≤5000 0,1≤ a[i] ≤109 這種關於異或的題,立馬想到了用tri etrie trie 來做,乙個很自然的想法就是列舉中間的y yy,然後開兩個tri etrie trie ,乙個維護1 11到y−1 y-1y− 1的數字,乙個維護y+1 y+1y+ 1到n nn的數字,然後同時在兩個tri etrie trie 上d fs dfsdf s。然而這樣複雜度會爆掉,我們考慮不直接dfs dfsdf s,而是統計下答案。 設c nt [i][ 0/1] cnt[i][0/1] cnt[i] [0/1 ]表示兩顆tri etrie trie 中,前i−1 i-1i− 1位相同,第i為不同的個數。0 00表示字首和的tri etrie trie 中第i ii位為1 11,字尾和的tri etrie trie 中第i ii位為0 00的個數,1 11反之。 那麼我們只需在列舉y yy時動態維護cnt cntcn t即可,統計答案可以直接用cnt cntcn t來求出。 還有未懂的地方看** author:galaxy yr lang:c++ created time:2023年09月22日 星期日 14時48分46秒 *******************************/ #include #include #include using namespace std; const int maxn= 5e4+10; const int lg=30; long long ans; struct trie void insert (int x) }void erase (int x) }}a,b; int cnt[maxn][2 ];void add( int x) }void del( int x) }int t,n,a[maxn] ,c;int main() }printf ("%lld\n" ,ans);} return0; } 題目 和是2組不同的等差三元組,除了等差的性質之外,還有個奇妙的地方在於 5 2 3 2 1 2 7 2 5 2 3 2 n 15。同這對三元組也存在同樣的性質 19 2 15 2 11 2 7 2 5 2 3 2 n 15。這種成對的三元組還有很多。當n 15時,有3對,分別是和,和,和。現給出乙... 問題 定義完美三元組,a,b,d a是d的倍數,b是d的倍數,且a b d 1 輸入 t組測試資料,第一行乙個t 1 t 10000 之後t行每行兩個整數l,r,表示三元組中a 的取值區間 l,r 在此條件下,求滿足的完美三元組的總數 1 l r 100000 輸出 乙個整數。分析 首先,a的值已經... 遞增三元組 描述給定三個整數陣列a a1,a2,an b b1,b2,bn c c1,c2,cn 請你統計有多少個三元組 i,j,k 滿足 1 i,j,k n ai bj ck 輸入第一行包含乙個整數n。第二行包含n個整數a1,a2,an。第三行包含n個整數b1,b2,bn。第四行包含n個整數c1,.../*******************************
等差三元組
完美三元組
遞增三元組