日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

JZOJ 5628. 【NOI2018模拟4.4】Travel

發(fā)布時(shí)間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JZOJ 5628. 【NOI2018模拟4.4】Travel 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Description

有N個(gè)人出去旅行,第i個(gè)人去A國(guó)有Ai種游玩方式,去B國(guó)有Bi種游玩方式,問(wèn)至少有C個(gè)人去A國(guó)的情況下,所有人的游玩方式有多少種不同的可能。
兩種所有人的游玩方式不同當(dāng)且僅當(dāng)存在一個(gè)人選擇的游玩方式不同,或選擇去的國(guó)家不同。
接下來(lái)有P次修改,每次修改一個(gè)人的Ai和Bi。

Input

第一行兩個(gè)正整數(shù),表示N,C,含義如題所示。
接下來(lái)一行N個(gè)整數(shù),第i個(gè)整數(shù)表示Ai。
接下來(lái)一行N個(gè)整數(shù),第i個(gè)整數(shù)表示Bi。
接下來(lái)一行一個(gè)正整數(shù)表示P。
接下來(lái)P行,每行三個(gè)整數(shù)i,x,y,表示修改Ai為x,Bi為y。

Output

對(duì)每次修改輸出一行一個(gè)整數(shù),表示總方案數(shù) mod 10007。

Sample Input

4 2
1 2 3 4
1 2 3 4
1
4 1 1

Sample Output

66

Data Constraint

對(duì)于100%的數(shù)據(jù)滿足:Ai,Bi,x,y在int范圍內(nèi)。

Solution

  • 直接線段樹(shù)……

  • 由于 c 特別的小,考慮正難則反。

  • 即用總方案數(shù) tot ,減去有 0c?1 個(gè)人到A國(guó)的方案數(shù) ans

  • 易得:

    tot=i=1n(ai+bi)

  • 開(kāi) c 棵線段樹(shù),代表一個(gè)區(qū)間代表恰好有 i 個(gè)人去A國(guó)的方案數(shù)。

  • 那么有:

    ans=i=0c?1f[root][i]

  • 每次轉(zhuǎn)移時(shí)枚舉左右子樹(shù)的 iO(c2) 轉(zhuǎn)移即可。

  • 總時(shí)間復(fù)雜度 O(Nc2?logN)

Code

#include<cstdio> #include<cctype> using namespace std; const int N=1e5+5,C=20,mo=10007; int n,c,qi,tot; int f[N<<2][C],a[N],b[N]; inline int read() {int X=0,w=0; char ch=0;while(!isdigit(ch)) w|=ch=='-',ch=getchar();while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X; } inline void write(int x) {if(x>9) write(x/10);putchar(x%10+'0'); } inline int ksm(int x,int y) {int s=1;while(y){if(y&1) s=s*x%mo;x=x*x%mo;y>>=1;}return s; } inline void update(int v) {int ls=v<<1,rs=ls|1;for(int i=0;i<c;i++) f[v][i]=0;for(int i=0;i<c;i++)for(int j=0;i+j<c;j++)f[v][i+j]=(f[v][i+j]+f[ls][i]*f[rs][j])%mo; } void make(int v,int l,int r) {if(l==r){f[v][0]=b[l];f[v][1]=a[l];return;}int mid=l+r>>1;make(v<<1,l,mid);make(v<<1|1,mid+1,r);update(v); } void change(int v,int l,int r) {if(l==r){f[v][0]=b[qi];f[v][1]=a[qi];return;}int mid=l+r>>1;if(qi<=mid) change(v<<1,l,mid); else change(v<<1|1,mid+1,r);update(v); } int main() {n=read(),c=read();for(int i=1;i<=n;i++) a[i]=read()%mo;for(int i=tot=1;i<=n;i++){b[i]=read()%mo;tot=tot*(a[i]+b[i])%mo;}make(1,1,n);int p=read();while(p--){qi=read();int x=read()%mo,y=read()%mo;tot=tot*ksm(a[qi]+b[qi],mo-2)%mo;tot=tot*(x+y)%mo;a[qi]=x,b[qi]=y;change(1,1,n);int ans=0;for(int i=0;i<c;i++) ans=(ans+f[1][i])%mo;ans=(tot-ans+mo)%mo;write(ans),putchar('\n');}return 0; }

總結(jié)

以上是生活随笔為你收集整理的JZOJ 5628. 【NOI2018模拟4.4】Travel的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。