題意:已知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的話,可以直接用二維樹狀陣列代替。
由於a集合大小是1e5,b集合大小也是1e5,直接運算c集合能爆,對於a集合,同乙個b只要取a最大的保留就可以,
這樣出題人給出最大資料c集合只能到1e5的大小。
#includeusing namespace std;
const int n=1e5+10;
struct pair
}p[n];
struct triple
int s[1010][1010];
void upd(int a, int b, int v)
int query(int a, int b)
void ss(struct pair q, int nn)
void show(struct triple q, int nn)
int main()
else
}int n1=0;
for(int i=1; i<=tot; i++)}}
// ss(p, tot);
/*show(tr, m);
show(c, n1);*/
sort(c+1, c+1+n1, cmp);
a=-1, b=-1, c=-1;
int n2=0;
for(int i=1; i<=n1; i++)
}int ans=0;
for(int i=1; i<=n2; i++)
upd(c[i].b, c[i].c, 1);
}printf("case #%d: %d\n", ++cas, ans);
}return 0;
}
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...
hdu5517 二維樹狀陣列
題意是給了 n個二元組 m個三元組,二元組可以和三元組 合併生成3元組,合併條件是與合併成 前提是 b e,如果存在組合 uwv 使得u a w c v d 並且uwv和acd不等 就說abc 不是最優的,求問最後又多少個組合是最優的 這個組合中是允許重複的 我們對於每個b只取最大的a,然後讓這個最...
二維三維偏序
一維偏序 就是排序,二維偏序 排序 樹狀陣列 例題 給定 n 個點 x,y 定義每個點的等級是在該點左下方 含正左 正下 的點的數目,試統計每個等級有多少個點。題目鏈結 分析 對於二維偏序 對1維x進行排序,那麼在右邊的點不會對左邊的點有貢獻。然後對y建立樹狀陣列。計算0 y的和,就是sum y i...