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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

JZOJ5922. 【NOIP2018模拟10.23】sequence

發(fā)布時間:2025/7/14 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JZOJ5922. 【NOIP2018模拟10.23】sequence 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

傳送門

preface  

  這道題想了好久好久主要是菜,但其實并不是很難,大佬現(xiàn)在走還來得及。。。。

分析

  這道題乍一看沒什么想法,暴力50pts騙走溜掉。但其實那個特殊點提示很大。

  對于第5個點的話,把式子化簡出來就是i-l+1,i-l+2...就這個點而言,就可以開兩個差分數(shù)組f,g,分別表示第i個位置的一次項系數(shù)和常數(shù)的差分。更新就變成了O(1)的。

  再把差分擴展到20,也不過是個二十一階差分嘛。然后,對于每i階的差分來說,都要做i次才能得到真正的值,而多次差分的數(shù)列正好對應帕斯卡矩陣的r-l+1行/列,也就是楊輝三角的r-l+1列,也就是一個組合數(shù)。所以對于每個修改,在l的對應階的差分數(shù)組上++,r+1的--,然后在r+1處向低階減k個組合數(shù)從而保證其他階不變。

  最后更新答案時一定要從高階往低階更新,這樣才能保證每i階都差分了i次,注意逆元和月莫就可以了。

p.s.我用預處理帕斯卡矩陣掛了后三個點??如果你用帕斯卡矩陣過了的話請留個評論。

code

?

#include<bits/stdc++.h> #define ll long long #define maxn 500010 #define reg register #define mod 1000000007 using namespace std; inline void read(int &x) {x=0;reg char s=getchar();while(s<'0' || s>'9') s=getchar();while(s>='0' && s<='9') x=x*10+s-'0',s=getchar(); } inline void print(ll x) {if(x<0){putchar('-');x=-x;}if(x>9) print(x/10ll);putchar(x%10ll+'0'); } int n,m; ll a[maxn][25],b[maxn][25],inv[maxn]; void pre() {inv[1]=1;for(int i=2; i<=n; i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod; } int main() {read(n),read(m);pre();reg int l,r,k;for(reg int i=1; i<=m; i++){read(l),read(r),read(k);a[l][k]=(a[l][k]+1)%mod;ll tmp=1,t=r-l;for(reg int j=k; ~j; j--){a[r+1][j]=(a[r+1][j]-tmp+mod)%mod;t++;tmp=tmp*t%mod*inv[t-(r-l)]%mod;}}for(reg int i=20; ~i; i--)for(reg int j=1; j<=n; j++)b[j][i]=((a[j][i]+b[j][i+1])%mod+b[j-1][i])%mod;for(reg int i=1; i<=n; i++) print(b[i][0]),putchar('\n');return 0; }

轉載于:https://www.cnblogs.com/wCTSd/p/9846285.html

總結

以上是生活随笔為你收集整理的JZOJ5922. 【NOIP2018模拟10.23】sequence的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。