Wannafly挑戰賽15 D 數字串 區間逆序對

2021-08-20 00:26:52 字數 2347 閱讀 1281

乙個只含數字的字串,q次操作,每次操作將第i位數字改為x,每次操作後,統計長度在[l, r]之間且首數字大於尾數字的子串的個數。

第一行乙個只含數字的字串;

第二行3個整數q, l, r;

接下來q行,每行兩個整數i, x。

輸出q行,每行乙個整數,表示長度在[l, r]之間且首數字大於尾數字的子串的個數。
示例1

585605

2 2 4

1 64 2

7

8

設字串長度為n則:

1 <= n <= 100000;

1 <= q <= 100000; 1 <= l <= r <= n; 1 <= i <= n; 0 <= x

<= 9;

題解:相當於求間隔距離在[l, r]之間的逆序對數。

因為所有數在[0,9]之間,所以可用 10 個樹狀陣列維護數字每種的字首和。

初始化求第一遍 ans 的時候,對於每個數考慮前面與該點的距離在[l,r]之間的所有點。

每次修改,減去當前位置的數對答案的影響,再加上更新後的數對答案的影響。

考慮前面和後面與該點的距離在[l,r]之間的所有點,更新 ans 即可。

時間複雜度:n*logn

樹狀陣列

#includeusing namespace std;

typedef long long ll;

const int maxn = 1e5+10;

char str[maxn];

int l,r,len;

struct bit

void init()

void update(int x,int pos,int val)

}bit;

int ask_left(int x,int pos) /// 統計在[pos-r+1,pos-l+1] 中有多少大於x的

int ask_right(int x,int pos,int len) /// 統計在[pos+l-1,pos+r-1] 中有多少個小於x的

int main()

// printf("%d\n",ans);

int pos,x;

while(q--)

}return 0;

}

線段樹

#includeusing namespace std;

typedef long long ll;

const int maxn = 1e5+10;

ll arr[maxn];

char str[maxn];

int l,r,len;

struct segtree

void push_up(int rt)

void build(ll arr,int l,int r,int rt)

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

build(arr,l,mid,rt<<1);

build(arr,mid+1,r,rt<<1|1);

push_up(rt);

}void activate(int pos,ll val,int l,int r,int rt)

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

if(pos <= mid) activate(pos,val,l,mid,rt<<1);

else activate(pos,val,mid+1,r,rt<<1|1);

push_up(rt);

}void update(int pos,ll val,int l,int r,int rt)

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

if(pos <= mid) update(pos,val,l,mid,rt<<1);

else update(pos,val,mid+1,r,rt<<1|1);

push_up(rt);

}ll query(int ql,int qr,int l,int r,int rt)

}seg[10];

ll ask_left(int num,int pos)

res += temp;

}return res;

}ll ask_right(int num,int pos)

res += temp;

}return res;

}int main()

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

int pos,x;

while(q--)

}return 0;

}

Wannafly挑戰賽15 D 數字串 線段樹

乙個只含數字的字串,q次操作,每次操作將第i位數字改為x,每次操作後,統計長度在 l,r 之間且首數字大於尾數字的子串的個數。第一行乙個只含數字的字串 第二行3個整數q,l,r 接下來q行,每行兩個整數i,x。輸出q行,每行乙個整數,表示長度在 l,r 之間且首數字大於尾數字的子串的個數。題解 更改...

wannafly 挑戰賽9 D(卡特蘭數)

題目描述 wyf正試圖用乙個棧來構造一棵樹,現在他已經構造了n個元素作為樹的節點,只要將這n個元素依次入棧出棧就可以形成一棵樹了。當然,這個問題與樹並沒有關係,所以它叫做wyf的棧。每次你可以入棧乙個新元素或者當棧非空時出棧乙個元素,n個元素必須依次入棧,而wyf希望其中第m個元素入棧之後,棧中恰好...

Wannafly挑戰賽6 D 鎖

時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld 題目描述 106號房間共有n名居民,他們每人有乙個重要度。房間的門上可以裝若干把鎖。假設共有k把鎖,命名為1到k。每把鎖有一種對應的鑰匙,也用1到k表示。鑰匙可以複...