hdu5517 二維樹狀陣列

2022-05-15 04:16:05 字數 1300 閱讀 8400

題意是給了 n個二元組 m個三元組, 二元組可以和三元組 合併生成3元組,合併條件是與合併成 前提是 b==e,

如果存在組合 uwv 使得u>=a w>=c v>=d 並且uwv和acd不等  就說abc 不是最優的,求問最後又多少個組合是最優的 , 這個組合中是允許重複的

我們對於每個b只取最大的a,然後讓這個最大的a去和相應的b,c進行組合,然後對於這樣的三元組 為了省去判斷和他相等的個數,我們直接將相同的元組合並到一起去,

然後列舉a求在 在矩陣c[b][c]右下邊是否存在值如果存在顯然這個就不是最優的,用二維樹狀陣列解決這個問題

#include #include 

#include

#include

#include

using

namespace

std;

const

int maxn=100005

;struct

point

bool

operator ==(const point &rhs)const

}p[maxn];

intb[maxn];

intnu[maxn];

int c[1005][1005

];int

nc,nd,numofc;

void

init()

int lowbit(int

x)void add(int c,int d,int

val)

int sum(int c, int

d)int

main()

else

if(b[b]==a) nu[b]++;

}for(int i=0; i)

nc=max(c,nc); nd=max(nd,d);

}sort(p,p+numofc);

int ge=1

;

for(int i=1; i)

if(p[i]==p[ge-1])p[ge-1].nu+=p[i].nu;

else p[ge++]=p[i];

numofc=ge;

int ans=0

; ge=0

;

for(int i=numofc-1; i>=0; i--)

ge++;

add(t.c,t.d,1);

}printf(

"case #%d: %d\n

",cc,ans);

}return0;

}

view code

HDU 5517 二維樹狀陣列

hdu 5517 題意 有二元組 a,b 三元組 c,d,e 當b e時它們能構成 a,c,d 然後,當不存在 u,v,w a,b,c 且u a,v b,w c時,則是乙個better集合裡的元素。問這個better集合有幾個元素。思路 自己寫的時候完全沒有思路啊 參考了和 首先基本思路是對於 a1...

HDU 5517 三維偏序 二維樹狀陣列

題意 已知a集合 a,b b集合 c,d,e c a b a,c,d 在b和e相等的情況下才可以,問題是求出c中有幾個元素,該元素除了自己沒有比他大的,的定義是當 a a b b c c 時,才成立。思路 三位偏序cdq可以解決,但是如果抓住c,d的範圍是1000的話,可以直接用二維樹狀陣列代替。由...

hdu1892二維樹狀陣列

樹狀陣列一般的操作只有 1.單點更新,區間查詢 2.區間更新,單點查詢 其中區間更新和單點更新不能同時寫在一起,會對樹狀陣列的結構早成影響。這題 wa的情況主要是沒有考慮到 x1,y1 可能大於 x2,y2 訓練 訓練題鏈結 include include include include inclu...