小奇遐想 樹狀陣列實現 容斥思想

2021-08-21 20:11:31 字數 1467 閱讀 5668

時間限制: 1 sec  記憶體限制: 128 mb

提交: 165  解決: 21

[提交] [狀態] [討論版] [命題人: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。

在一串行中求滿足1243大小關係的串

利用容斥的思想,轉換為先求12xx(包括1234,1243),然後再減去1234

先利用一次樹狀陣列求出每個數前面比他小的數字,存在l[i]陣列裡

通過計算得到每個數後面比他大的數字,存在r[i]陣列裡

12xx很好計算,就是取數相乘即可

然後計算1234,因為每個數字比他小的已經存在l[i]陣列裡,所以一種想法是用樹狀陣列求一次比他大的,然後在求一次

優化之後的是利用l[i]陣列計算每個數前面的不下降子串的個數,然後再乘後面比他大的數字個數

最後兩者相減

(好不容易有正確的想法,結果因為不會用樹狀陣列求1234,卡死在這道題上)

最後記得取餘,還有不是取1e9+7

**:

#include using namespace std;

typedef long long ll;

const int maxx=2e5+100;

const int inf=1e9;

const int mod=16777216;

int n;

int a[maxx];

int l[maxx],r[maxx];

int sum[maxx];

int ask(int x)

return ret;

}void add(int x,int c)

}int main()

ll ans1=0;

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

memset(sum,0,sizeof(sum));

ll ans2=0;

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

printf("%lld\n",(ans1-ans2+mod)%mod);

return 0;

}

UPC5727小奇遐想 樹狀陣列 容斥

時間限制 1 sec 記憶體限制 128 mb 提交 285 解決 58 提交 狀態 討論版 命題人 admin 題目描述 擷來一縷清風飄渺 方知今日書信未到 窗外三月天霽垂柳新長枝條 風中鳥啼猶帶歡笑 清風醉夢 小奇望著青天中的悠悠白雲,開始了無限的遐想,在它的視野中,恰好有n朵高度不同的白雲排成...

小奇遐想(樹狀陣列)

擷來一縷清風飄渺 方知今日書信未到 窗外三月天霽垂柳新長枝條 風中鳥啼猶帶歡笑 清風醉夢 小奇望著青天中的悠悠白雲,開始了無限的遐想,在它的視野中,恰好有n朵高度不同的白雲排成一排,他想從左到右選出四朵白雲a,b,c,d,使得h a輸入 第一行包括1個整數n。第二行包括n個整數,第i個正數表示h i...

樹狀陣列 小奇遐想

時間限制 1 sec 記憶體限制 128 mb 提交 225 解決 35 提交 狀態 討論版 命題人 admin 題目描述 擷來一縷清風飄渺 方知今日書信未到 窗外三月天霽垂柳新長枝條 風中鳥啼猶帶歡笑 清風醉夢 小奇望著青天中的悠悠白雲,開始了無限的遐想,在它的視野中,恰好有n朵高度不同的白雲排成...