填坑 一直遺忘的樹套樹版本動態CDQ

2022-05-20 23:28:42 字數 1398 閱讀 2362

題解: 樹狀陣列維護動態開點線段樹 實質上是樹狀陣列對應區間維護一顆動態開點線段樹 方便對應區間小於x的個數

#include #define ll long long

const int maxn=1e5+10;

using namespace std;

ll read()

while(isdigit(ch))x=x*10+ch-'0',ch=getchar();

return f*x;

}typedef struct nodenode;

vectorvec;

node d[maxn*85];

int a[maxn],n,m,cnt,id[maxn],rt[maxn];

int get_id(int x)

void csh(int x)

void csh1(int x)

void update(int &x,int l,int r,int t,int vul)

ll ans=0;

void querty(int x,int l,int r,int ql,int qr)

int mid=(l+r)>>1;

if(ql<=mid)querty(d[x].l,l,mid,ql,qr);

if(qr>mid)querty(d[x].r,mid+1,r,ql,qr);

}int p[maxn];

void add(int x)

int sum(int x)

int main(){

n=read();m=read();cnt=0;

for(int i=1;i<=n;i++)a[i]=read(),id[a[i]]=i;ll sum=0;

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

csh(i);

for(int j=0;jtime limit: 10 sec  memory limit: 128 mb

submit: 7107  solved: 2526

[submit][status][discuss]

對於序列a,它的逆序對數定義為滿足iaj的數對(i,j)的個數。給1到n的乙個排列,按照某種順序依次刪

除m個元素,你的任務是在每次刪除乙個元素之前統計整個序列的逆序對數

輸入第一行包含兩個整數n和m,即初始元素的個數和刪除的元素個數。

以下n行每行包含乙個1到n之間的正整數,即初始排列。

以下m行每行乙個正整數,依次為每次刪除的元素。

n<=100000 m<=50000

輸出包含m行,依次為刪除每個元素之前,逆序對的個數。

5 4153

4251

4252

21樣例解釋

(1,5,3,4,2)(1,3,4,2)(3,4,2)(3,2)(3)。

我一直站在被你遺忘的地方

我一直站在被你遺忘的地方 說實在的,電腦對我來說沒多大用處。除了處理文字以外,我大多數的時間喜歡靜靜地聽 神秘圓 然後用qq上線 離開 下線 上線不斷重複。我知道你的頭像不會再閃動,因為它剛剛被我丟進了黑名單,我只是想這樣繼續等待,等待那個永遠不會再上線的你。思緒是瑣碎的,凌亂不堪。就如同生活的片段...

填坑行動6 樹的重心

目錄對於一棵樹無根樹,找到乙個點,使得把樹變成以該點為根的有根樹時,最大子樹的結點數最小。換句話說,刪除這個點後最大連通塊 一定是樹 的結點數最小。樹的重心不唯一。樹中所有點到某個點的距離和中,到重心的距離和是最小的,如果有兩個重心,他們的距離和一樣。把兩棵樹通過一條邊相連,新的樹的重心在原來兩棵樹...

關於xcode 版本更新 一直顯示在處理中的問題

nsbundle mainbundle infodictionary valueforkey cfbundleshortversionstring 該版本的版本號是三個分隔的整數組成的字串。第乙個整數代表重大修改的版本,如實現新的功能或重大變化的修訂。第二個整數表示的修訂,實現較突出的特點。第三個整...