僅一行乙個整數表示答案。
將乙個排列圍成乙個環,每個點有乙個值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 #include7view codeusing
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 }
朗格拉日計數 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,...