這個題很繞,記數字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...