題目大意:給出三個排列a,b,c,問同時滿足ax < ay,bx < by,cx < cy的數對有多少。
o(n log^2 n)的做法:經典的三維數點問題,排序一維,cdq分治一維,樹狀陣列一維。
o(n log n)的做法:因為均為排列,所以沒有相同的元素,設s(x,y)=[ax < ay]+[bx < by]+[cx < cy]。顯然max(s(x,y),s(y,x))的取值只有2或3,假設取值為2的有p種,為3的有q種,p+q=n*(n-1)/2。設p(a,b)=只考慮a,b兩個排列的答案,3 *p+q=p(a,b)+p(b,c)+p(a,c)。二維數點求出p即可。
**:
#include
#include
#include
#include
#define ll long long
using
namespace
std;
ll seed,ans=0;
int n,t[2000100];
struct node
p[2000100];
ll rand()
inline
bool cmpa(node x,node y)
void add(int x)
}int query(int x)
return re;
}int main()
memset(t,0,sizeof(t));
for(int i=1;i<=n;i++)
sort(p+1,p+n+1,cmpb);
memset(t,0,sizeof(t));
for(int i=1;i<=n;i++)
printf("%lld\n",(ans-(ll)n*(n-1)/2)/2);
}/*4
201334450
1474105774
350932494
*/
清華集訓2017模擬12 10 大佬的難題
1 n 2e6,時限 2.5s 容斥原理瞎搞。設a,b,c分別為滿足三個條件的集合。根據容斥原理,有 a b c a b c a b a c b c a b c 而a b c同時會等同於總數n n 1 都大於的個數 即都小於的個數a b c 所以 n n 1 a b c a b c a b a c ...
2017湖南集訓7 9 營養餐 階梯博弈
設num i 表示點i還能取走多少個水果,num i a i sigma a son b son 可以發現點i拿走k個後,num i k,num fa i k b i 於是就能想到階梯博弈了,先把b i 0的點與fa i 的邊斷掉,因為取了i點的水果對fa i 是沒有影響的,剩下的森林裡,sg函式值...
一位大佬的前端面試分享
博主就讀於電子科技大學,大三狗一枚!面試是個漫長的過程,從海投到收穫 面試,一面 二面 三面,乙個步驟出錯那麼後面就宣告終結。同時,面試過程中你也可能會遇到一些面試官的刁難,甚至部分面試官會說些比較打擊你的話,但是大部分面試官都是很棒的!必須有牢固的基礎知識,足夠豐富的專案經歷 就我而言差不多是三個...