時間限制: 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朵高度不同的白雲排成...