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

2021-08-19 21:54:27 字數 1168 閱讀 7819

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

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

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

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

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

題解:

更改i位置的數為x,查詢left~i大於x的數有多少個,

查詢i~right小於x的數有幾個。

注意左右邊界的確定問題,防止越界。

**:#includeusing namespace std;

#define ll long long

const int maxn=1e5+7;

char t[maxn];

int a[maxn];

struct node

tree[maxn<<2];

void push_up(int rt)

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

return;

}int m=(l+r)>>1;

build(l,m,rt<<1);

build(m+1,r,rt<<1|1);

push_up(rt);

}int query(int l,int r,int rt,int k)

ll s=0;

if(l<=tree[rt].mid)

s+=query(l,r,rt<<1,k);

if(r>tree[rt].mid)

s+=query(l,r,rt<<1|1,k);

return s;

}void update(int l,int rt,int k)

return;

}if(l<=tree[rt].mid)

update(l,rt<<1,k);

else

update(l,rt<<1|1,k);

push_up(rt);

}int main()

ans2=x1+x2-x3;

ans=ans+ans2-ans1;

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

}return 0;

}

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

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

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表示。鑰匙可以複...