NOI Online 1 提高組 氣泡排序

2022-05-11 01:49:18 字數 1245 閱讀 2963

這個題很繞,記數字i前面有cns[i]個數字比他大,逆序對個數就是sigmi cns[i]

反轉k次就是讓cns[i] - k (i>=1 && i <= n) 而且cns[i]不能有負數

利用兩個線段樹維護一下,就是有點繞。。。。

#include#include#include#include#includeusing namespace std;

typedef long long ll ;

const int maxn = 2e5+11;

struct nodetree[4][maxn*4];

int update(int id,int node,int be,int en,int i,int val)

if(i <= mid) update(id,l,be,mid,i,val);

else update(id,r,mid+1,en,i,val);

tree[id][node].ans = tree[id][l].ans + tree[id][r].ans;

tree[id][node].sum = tree[id][l].sum + tree[id][r].sum;

return 0;

}ll ask(int id,int node,int be,int en,int ll,int rr)

ll a = 0;

if(ll <= mid) a += ask(id,l,be,mid,ll,rr);

if(rr > mid) a += ask(id,r,mid+1,en,ll,rr);

return a;

}ll ask2(int id,int node,int be,int en,int ll,int rr)

ll a = 0;

if(ll <= mid) a += ask2(id,l,be,mid,ll,rr);

if(rr > mid) a += ask2(id,r,mid+1,en,ll,rr);

return a;

}int list[maxn];

ll cns[maxn];

int main()

while(m--)

else

swap(list[y],list[y+1]);

} else

else if(y >= n)

else

printf("%lld\n",ans);

} }

return 0;

}

NOI Online 1 提高組 序列

luogu p6185 noi online 1 序列 將其轉化為圖論題。定義 u,v 為 a i 所代表的點 u v 為 b i 所代表的點 對於操作 2 將其視為一種權值搬運的操作,從 u 到 v 或者反過來轉移點權。那麼我們對 u,v 和 u v 連一條無向邊,顯然對於乙個連通塊內的所有點都可...

NOI Online 1 提高組 T2 氣泡排序

對乙個序列給定兩種操作,交換兩個相鄰的數,求經過k kk輪氣泡排序後逆序對個數。一輪氣泡排序指的是氣泡排序內層迴圈執行一遍。可以發現,乙個數能進行交換,當且僅當前面沒有比它大的數。而且每輪前面比它大的數都會少1 11,因為前面有且僅有乙個最大的數到它的後面,其他較大且能交換的數一定遇到這個最大的數停...

NOI Online 1 入門組 魔法

全網都是矩陣快速冪,我只會倍增dp 其實這題與 acwing 345.牛站 還是比較像的,那題可以矩陣快速冪 倍增,這題也行。先 floyd 預處理兩點之間不用魔法最短距離 d 複雜度 o n 3 然後預處理兩點之間至多用乙個魔法的最短距離 w 初始為 w d 列舉 i,j 和一條邊 u,v,t w...