找出乙個序列裡,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,我們貪心地把它們提到深度大於...