乙個只含數字的字串,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表示。鑰匙可以複...