Foreign 朗格拉日計數 暴力

2022-05-20 07:28:21 字數 1292 閱讀 4278

僅一行乙個整數表示答案。

將乙個排列圍成乙個環,每個點有乙個值a[i],若順時針三個點a、b、c 滿足 a[a]

我們不考慮環,從序列考慮,顯然可以統計的就是類似這種:123、231、312這個樣子的。

我們考慮容斥,顯然123這種是可以直接計算的,231就是xx1 - 321,312就是3xx - 321。

顯然我們這樣這樣用樹狀陣列統計一下 f[i] 表示 i 前面

然後這樣暴力計算即可。

1 #include2 #include3 #include4 #include5 #include6 #include7

using

namespace

std;

8 typedef long

long

s64;

9const

int one = 1000001;10

const

int mod = 1e9+7;11

12int

n;13

inta[one],f[one];

14s64 ans;

1516

intget

()17

2627 s64 c(int

n)28

3132

33namespace

bit34

4142

void add(int r,int

x)43

4748

int query(int

r)4955}

5657

int pre_min(int i)

58int pre_max(int i)

59int suc_min(int i)

60int suc_max(int i)

6162

intmain()

6372

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

7480

81 printf("

%lld

",ans);

82 }

view code

朗格拉日計數 counter

在平面上以圓周等分排列著n個帶標號 標號為1 n 的點,你需要計算有多少個三元組 a,b,c 滿足a 分布順序為順時針的意思是,從標號為a的點出發,順時針在圓上遍歷一圈,標號為b的點先遍歷到,標號為c的點後遍歷到 a 第一行乙個整數n表示點數。第二行n個整數表示乙個1 n的排列,按順時針順序描述圓上...

朗格拉日計數 counter

在平面上以圓周等分排列著n個帶標號 標號為1 n 的點,你需要計算有多少個三元組 a,b,c 滿足a 分布順序為順時針的意思是,從標號為a的點出發,順時針在圓上遍歷一圈,標號為b的點先遍歷到,標號為c的點後遍歷到 a 第一行乙個整數n表示點數。第二行n個整數表示乙個1 n的排列,按順時針順序描述圓上...

Foreign 詠歎 模擬退火

time limit 100 sec memory limit 256 mb 有n根木棍,第i根長度為ai。你要貼著牆圍出乙個矩形區域,木棍圍成的矩形邊緣必須平行或垂直於牆,且又一邊必須利用牆。你可以把至多1根木棍劈成兩根 不一定要在整數字置 最大化矩形面積。包含多組資料。每組資料第一行乙個整數n,...