CF961E Fufuruma(分塊 樹狀陣列)

2022-06-18 02:12:11 字數 1160 閱讀 9338

找出乙個序列裡,ij and a[j]>i的對數

問題可以轉化為對每個i,找到下標區間在i+1到a[i]內的j,同時a[j]>=i的數的數量,並求和。

考慮分塊,然後對每個塊維護乙個樹狀陣列。分塊做的還是不熟練,比賽的時候陣列開小了導致沒過。

分塊還是很強,可以做一些線段樹做不了的東西。

這題的正解是可持久化線段樹,明天補。

//

一對數成立的標準是

//i//

a[i]>=j

//a[j]>=i

#includeusing

namespace

std;

const

int maxn=2e5+100

;typedef

long

long

ll;int lowbit (int

x) int

n;int

a[maxn];

int mk[205][maxn];//

分塊 int

st[maxn];

inted[maxn];

intpos[maxn];

intnum[maxn];

void up (int p,int

x) int getsum (int p,int

x) int

main ()

if (ed[tt]for (int i=1;i<=tt;i++)

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

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

int p1=pos[i+1

];

int p2=pos[a[i]];

if (a[i]1) continue

;

if (p1==p2)

continue

; }

for (int j=p1;j<=p2;j++)

for (int j=a[i]+1;j<=ed[p2];j++) if (a[j]>=i) ans--;

for (int j=st[p1];j1;j++) if (a[j]>=i) ans--;

}printf(

"%lld\n

",ans);

}

CF掉分日記 6 6 6 8

恢復內容開始 寫的效果依舊不好 還沒寫完前四題比賽就結束了 而且這些普及組的題目 我大多還是缺少簡單演算法的靈性 總是把問題搞複雜化。6.5 a 第一道題非常水 簡單分析發現是乙個快速冪的逆過程。logn時間內解決。b 這是乙個比平成的模擬要難上一點點的 模擬 因為有可能爆ll 所以寫之前要把該考慮...

CF1168B Good Triple 性質分析

給出01串s,求數對 l,r 個數,使得能找到至少一對 x,k 使1 x,k s 且l x題解 這是乙個 01 串.這個性質不是白給的qaq.考慮暴力,複雜度貌似是 n 2 級別的.然而,我們發現每乙個區間長度不會超過 9,直接暴力解決即可.code include define maxn 1000...

CF983E NN country(倍增,差分)

給定一棵樹和若干條路線,每條路線相當於樹上 x,y 之間的路徑,途徑路徑上的每個點 給出若干個詢問,每次詢問從 u 到 v 至少需要利用幾條路線 n,m,q 200000 構建倍增陣列g i j 表示從i點向上經過j條線路能到達的深度最小的點。所以對於每一對詢問的x,y,我們貪心地把它們提到深度大於...