<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      「BZOJ 4361」isn 題解

      「BZOJ 4361」isn 題解


      知識點

      DP,組合數學,容斥,樹狀數組。

      分析

      首先,我們不考慮「非降時停止」這個限制,那么則可用 DP 求解。

      \(f_{i,j}\) 表示 \(1\sim i\) 中,組成一個長度為 \(j\) 的非降子序列的方案數。初態和轉移式:

      \[\forall i,f_{i,1} = 1\\ f_{i,j} = \sum_{k<i} f_{k,j-1}[a_{k} \le a_i] \\ \]

      這個問題答案就是:

      \[\sum_{j=1}^n j\cdot (n-j)!\sum_{i=j}^{n} f_{i,j} \]

      然后我們來考慮「非降時停止」:其實只要把每個不合法的從原本的減掉即可,而這些不合法的我們都可以從已有的 DP 狀態中推出來。

      我們簡化一下,設 \(g_i\) 表示所有組成長度為 \(i\) 的非降子序列的方案數,即:

      \[g_i = \sum_{j=i}^n f_{j,i} \\ \]

      那么考慮「非降時停止」的組成長度為 \(i\) 的非降子序列方案數就是:\((n-i)!\cdot g_i - (i+1)(n-i-1)!\cdot g_{i+1}\)。所以累加即可。

      DP 暴力可做到 \(O(n^3)\),離散化后用樹狀數組即可優化到 \(O(n^2\log_2{n})\)

      代碼

      //#define Plus_Cat ""
      #include<bits/stdc++.h>
      #define INF 0x3f3f3f3f
      #define ll long long
      #define RCL(a,b,c,d) memset(a,b,sizeof(c)*(d))
      #define FOR(i,a,b) for(int i(a);i<=(int)(b);++i)
      #define DOR(i,a,b) for(int i(a);i>=(int)(b);--i)
      #define tomax(a,...) ((a)=max({(a),__VA_ARGS__}))
      #define tomin(a,...) ((a)=min({(a),__VA_ARGS__}))
      #define EDGE(g,i,x,y) for(int i=(g).h[(x)],y=(g)[(i)].v;~i;y=(g)[(i=(g)[i].nxt)>0?i:0].v)
      #define main Main();signed main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);return Main();}signed Main
      using namespace std;
      constexpr int N(2e3+10);
      
      namespace Modular {
      #define Mod 1000000007
      	int fac[N];
          //Modular
      	void Init(const int n=N-5) {
      		FOR(i,fac[0]=1,n)fac[i]=mul(fac[i-1],i);
      	}
      } using namespace Modular;
      
      int n,ans;
      int a[N],b[N],f[N];
      
      class BIT {
      private:
      	int c[N];
      public:
      	void Init() { RCL(c+1,0,int,b[0]); }
      #define lowbit(i) ((i)&-(i))
      	void Plus(int x,int d) { if(x>0)for(; x<=b[0]; x+=lowbit(x))toadd(c[x],d); }
      #undef lowbit
      	int Sum(int x) {
      		int ans(0);
      		if(x>0)for(; x; x&=x-1)toadd(ans,c[x]);
      		return ans;
      	}
      } bit;
      
      signed main() {
      #ifdef Plus_Cat
      	freopen(Plus_Cat ".in","r",stdin),freopen(Plus_Cat ".out","w",stdout);
      #endif
      	cin>>n,Init(n),ans=mul(n,fac[n-1]);
      	FOR(i,1,n)cin>>a[i],b[i]=a[i],f[i]=1;
      	sort(b+1,b+n+1),b[0]=unique(b+1,b+n+1)-b-1;
      	FOR(i,1,n)a[i]=lower_bound(b+1,b+b[0]+1,a[i])-b;
      	FOR(len,2,n) {
      		bit.Init(),bit.Plus(a[len-1],f[len-1]),f[len-1]=0;
      		int sum(0);
      		FOR(i,len,n) {
      			int tmp(bit.Sum(a[i]));
      			bit.Plus(a[i],f[i]),toadd(sum,f[i]=tmp);
      		}
      		toadd(ans,Mod-mul(sum,len-1,fac[n-len]));
      	}
      	cout<<ans<<endl;
      	return 0;
      }
      

      posted @ 2025-06-11 20:25  Add_Catalyst  閱讀(6)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 欧美成人精品一级在线观看| 国产在线精品一区二区夜色| 人妻熟女一二三区夜夜爱| 精品蜜臀国产av一区二区| 强d乱码中文字幕熟女1000部 | 国产在线一区二区不卡| 九九热视频免费在线播放| 日本国产一区二区三区在线观看 | 99精品久久精品| 宁波市| 国产精品国产三级国产an| 韩国无码AV片午夜福利| 中文字幕乱码在线人视频| 一二三四中文字幕日韩乱码| 亚洲精品综合一区二区三区| 久热综合在线亚洲精品| 口爆少妇在线视频免费观看| 在线日韩日本国产亚洲| 亚洲av高清一区二区三| 免费大黄网站在线观看| 亚洲小说乱欧美另类| 国产69精品久久久久人妻| 亚洲国产大胸一区二区三区| 亚洲AV永久无码嘿嘿嘿嘿| 国产超高清麻豆精品传媒麻豆精品| 日日爽日日操| 国产好大好硬好爽免费不卡 | 久热久视频免费在线观看| 精品国产一区二区三区久久女人| 日韩av日韩av在线| 人妻另类 专区 欧美 制服| 日韩不卡1卡2卡三卡网站| 国产精品大片中文字幕| 国产偷拍自拍视频在线观看| 一本精品99久久精品77| 国产精成人品| 无码国产精品一区二区av| 蜜臀av入口一区二区三区| 亚洲国产性夜夜综合| 国产一区二区三区怡红院| 国产蜜臀精品一区二区三区 |