時間限制: 1 sec 記憶體限制: 128 mb
提交: 225 解決: 35
[提交] [狀態] [討論版] [命題人:admin]
題目描述
擷來一縷清風飄渺
方知今日書信未到
窗外三月天霽垂柳新長枝條
風中鳥啼猶帶歡笑
——《清風醉夢》
小奇望著青天中的悠悠白雲,開始了無限的遐想,在它的視野中,恰好有n朵高度不同的白雲排成一排,他想從左到右選出四朵白雲a,b,c,d,使得h_a輸入
第一行包括1個整數n。
第二行包括n個整數,第i個正數表示h_i,保證這n個整數是n的乙個全排列。
輸出輸出乙個整數表示答案。(mod 16777216)
樣例輸入
5
1 5 3 2 4
樣例輸出
0
提示
對於10%的資料n<=600;對於40%的資料n<=5000;
對於100%的資料n<=200000。
【分析】
用樹狀陣列求正序對的方法,求陣列pre2,pre2[i] 表示 i 處結尾的長度為2的公升序子串行種數(即正序對數量)
同理,求陣列late2, late2[i] 表示 i 處為開頭向後,長度為2的公升序子串行數量(正序對數量)
根據late2陣列可繼續利用樹狀陣列求得陣列late3
late3[i] 表示 i 處為開頭向後,長度為3的公升序子串行數量
再來一次,倒敘迴圈,求得陣列big , big[i] 表示 i 處後面的大於 a[i] 的數的個數
好,現在,列舉選中的四個數的第二個數,for(int i=1;i<=n;i++)
那麼當把a[i]作為第二個數時對總答案的貢獻是 1243型種數 = 12**型種數 - 1234型種數(其中*表示大於2的數)
12**型種數 = pre2[i] * c(big[i], 2)
1234型種數 = pre2[i] * late3[i]
【**】
#includeusing namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const int mod=16777216;
const int max=2e5+5;
ll c[202020];
void add(int k,ll num,int top)
ll read(int k)
int a[max],n;
ll late3[max];
ll pre2[max];
int main()
memset(c,0,sizeof(c));
for(int i=n;i>=1;i--)
memset(c,0,sizeof(c));
for(int i=n;i>=1;i--)
// ans = 12**-1234 (*>2)
memset(c,0,sizeof(c));
ll ans=0;
for(int i=n;i>=1;i--)
cout<}
小奇遐想(樹狀陣列)
擷來一縷清風飄渺 方知今日書信未到 窗外三月天霽垂柳新長枝條 風中鳥啼猶帶歡笑 清風醉夢 小奇望著青天中的悠悠白雲,開始了無限的遐想,在它的視野中,恰好有n朵高度不同的白雲排成一排,他想從左到右選出四朵白雲a,b,c,d,使得h a輸入 第一行包括1個整數n。第二行包括n個整數,第i個正數表示h i...
小奇遐想 樹狀陣列實現 容斥思想
時間限制 1 sec 記憶體限制 128 mb 提交 165 解決 21 提交 狀態 討論版 命題人 admin 題目描述 擷來一縷清風飄渺 方知今日書信未到 窗外三月天霽垂柳新長枝條 風中鳥啼猶帶歡笑 清風醉夢 小奇望著青天中的悠悠白雲,開始了無限的遐想,在它的視野中,恰好有n朵高度不同的白雲排成...
UPC5727小奇遐想 樹狀陣列 容斥
時間限制 1 sec 記憶體限制 128 mb 提交 285 解決 58 提交 狀態 討論版 命題人 admin 題目描述 擷來一縷清風飄渺 方知今日書信未到 窗外三月天霽垂柳新長枝條 風中鳥啼猶帶歡笑 清風醉夢 小奇望著青天中的悠悠白雲,開始了無限的遐想,在它的視野中,恰好有n朵高度不同的白雲排成...