題解: 樹狀陣列維護動態開點線段樹 實質上是樹狀陣列對應區間維護一顆動態開點線段樹 方便對應區間小於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 該版本的版本號是三個分隔的整數組成的字串。第乙個整數代表重大修改的版本,如實現新的功能或重大變化的修訂。第二個整數表示的修訂,實現較突出的特點。第三個整...