hdoj5792求四元組的個數 容斥 樹狀陣列

2021-07-16 02:20:45 字數 884 閱讀 3214

題意:給出乙個序列,求滿足1<=anum[d],四元組a,b,c,d的個數。

設l[i]代表左邊小於num[i]的個數,l1[i]代表左邊大於num[i]的個數,r[i]代表右邊小於num[i]的個數,r1[i]代表右邊大於num[i]的個數。

ans=ab二元組的個數*cd二元組的個數-ac相等時三元組的個數-bc相等時三元組的個數-ad相等時三元組的個數-bd相等時三元組的個數

ab二元組的個數=l[i]的和,cd二元組的個數=r[i]的和,ac相等時三元組的個數=r[i]*r1[i]的和,bc

相等時三元組的個數=l[i]*r[i]的和,ad相等時三元組的個數=l1[i]*r[i]的和,cd

相等時三元組的個數=l[i]*l1[i]的和

然後就完美解決了

#include #include #include #include #include using namespace std;

#define max(a,b) a>b?a:b

int n,id;

const int maxn=5e4+10;

int c[maxn];

pairq[maxn];

bool cmp(pairx,pairy)

else

q[i].first=id;

}sort(q+1,q+n+1,cmp1);

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

for(int i=0;i<=id;i++)

c[i]=0;

for(int i=n;i>=1;i--)//因為有重複,要分開來求

long long ans1,ans2,ans3;

ans1=ans2=ans3=0;

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

cout<

2879 求三元組個數

單點時限 2.0 sec 記憶體限制 256 mb 有 n 1 n 500 個正整數,求由這些整數組成的滿足條件的三元組 的個數 a,b,c 兩兩互質,或 a,b,c 兩兩不互質。注意 不考慮 a,b,c 的排列順序,即 a,b,c 與 b,a,c 視為同乙個三元組。n 個整數可能有重複,不同位置的...

TCP IP的四元組 五元組 七元組

四元組是 源ip位址 目的ip位址 源埠 目的埠 五元組是 源ip位址 目的ip位址 協議號 源埠 目的埠 七元組是 源ip位址 目的ip位址 協議號 源埠 目的埠,服務型別以及介面索引 協議號 ip是網路層協議,ip頭中的協議號用來說明ip報文中承載的是哪種協議,協議號標識上層是什麼協議 一般是傳...

再次證明訊息四元組的處理順序。

1。本視窗動作引起,則過程如下 erasebkgnd begin ctlcolor begin ctlcolor end erasebkgnd end paint begin paint end 2。由另外其他視窗動作引起,過程如下 paint begin erasebkgnd begin ctlc...