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

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

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

      「LG3600-隨機數生成器」題解

      P3600 隨機數生成器

      sol

      期望不太方便,轉計數。那么就是要求對每個值,最后結果恰為這個值的方案數。

      恰好不太好求,考慮差分,轉化為至多,那么就是要對每個值求答案不超過這個值的方案數。

      要求所有區間區間內最小值的最大值不超過標準值,也就是要求每個區間都得有一個不超過標準值的數。容易將原序列轉化為 0-1 序列,再轉化為線段覆蓋問題:要求放一些點點,使得每個給出的區間內都包含有一個點。求放點方案數。

      首先不難發現不存在包含關系的區間,因為小區間滿足大區間必然滿足。那么現在區間右端點關于左端點不降。

      考慮 DP 求這個,設計 \(f(i,j)\) 表示前 \(i\) 個點共選了 \(j\) 個點且欽定選第 \(i\) 個點使得所有左端點不超過 \(i\) 的區間均滿足性質的方案數。轉移考慮枚舉上一個合法點的位置,那么簡單預處理出覆蓋各個點的最左的區間與最右的區間,則上一個合法點必須位于當前點前最后一個不被當前點覆蓋的區間內。這個顯然可以簡單前綴和優化。

      求出 \(f\) 之后找方案數是簡單的,枚舉標準值 \(v\) 與總放點數 \(i\),有系數 \(i^v(n-i)^{x-v}\),意義顯然。最后枚舉答案差分得到方案并除總方案數得到期望即可。

      code

      const int N=2005;
      
      int n,x,q,m;
      struct node{int l,r;}ns[N],ls[N];
      int lb[N],rb[N];
      
      int dtl[N<<2],dtr[N<<2],lzl[N<<2],lzr[N<<2];
      void build(int x=1,int l=1,int r=n){
          dtl[x]=lzl[x]=inf;
          dtr[x]=lzr[x]=-inf;
          if(l==r)return;
          int m=l+r>>1;
          build(x<<1,l,m);
          build(x<<1|1,m+1,r);
      }
      void pushdown(int x){
          chmin(dtl[x<<1],lzl[x]);
          chmin(dtl[x<<1|1],lzl[x]);
          chmin(lzl[x<<1],lzl[x]);
          chmin(lzl[x<<1|1],lzl[x]);
          chmax(dtr[x<<1],lzr[x]);
          chmax(dtr[x<<1|1],lzr[x]);
          chmax(lzr[x<<1],lzr[x]);
          chmax(lzr[x<<1|1],lzr[x]);
          lzl[x]=inf,lzr[x]=-inf;
      }
      void modify(int lq,int rq,int v,int x=1,int l=1,int r=n){
          if(lq<=l&&r<=rq)return chmin(dtl[x],v),chmin(lzl[x],v),chmax(dtr[x],v),chmax(lzr[x],v),void();
          int m=l+r>>1;
          pushdown(x);
          if(lq<=m)modify(lq,rq,v,x<<1,l,m);
          if(m<rq)modify(lq,rq,v,x<<1|1,m+1,r);
      }
      pii query(int k,int x=1,int l=1,int r=n){
          if(l==r)return {dtl[x],dtr[x]};
          int m=l+r>>1;
          pushdown(x);
          if(k<=m)return query(k,x<<1,l,m);
          else return query(k,x<<1|1,m+1,r);
      }
      
      mint f[N][N],s[N][N];
      mint g[N],ans;
      
      inline void Main(){
          cin>>n>>x>>q;
          rep(i,1,q)cin>>ns[i].l>>ns[i].r;
          sort(ns+1,ns+1+q,[&](node a,node b){if(a.l!=b.l)return a.l<b.l;return a.r<b.r;});
          int mx=inf;
          per(i,q,1)if(ns[i].r<mx)mx=ns[i].r,ls[++m]=ns[i];
          reverse(ls+1,ls+1+m);
          build();
          rep(i,1,m)modify(ls[i].l,ls[i].r,i);
          rep(i,1,n){
              pii res=query(i);
              if(res.fir!=inf)lb[i]=res.fir,rb[i]=res.sec;
              else rb[i]=rb[i-1],lb[i]=rb[i]+1;
          }
          f[0][0]=s[0][0]=1;
          rep(i,1,n)s[i][0]+=s[i-1][0];
          rep(j,1,n){
              rep(i,j,n){
                  f[i][j]=s[i-1][j-1]-(ls[lb[i]-1].l-1<0?0:s[ls[lb[i]-1].l-1][j-1]);
                  s[i][j]+=f[i][j];
              }
              rep(i,1,n)s[i][j]+=s[i-1][j];
          }
          rep(v,1,x)rep(i,1,n)g[v]+=(s[n][i]-s[ls[m].l-1][i])*qpow(v,i)*qpow(x-v,n-i);
          rep(v,1,x)ans+=v*(g[v]-g[v-1]);
          put(ans/qpow(x,n));
      }
      
      posted @ 2025-10-27 17:40  LastKismet  閱讀(5)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产一区精品在线免费看| 国产亚洲av人片在线播放| 久久亚洲av成人一二三区| 最近中文字幕完整版2019| 国产免费高清69式视频在线观看| 男女一边摸一边做爽爽| 日韩亚洲视频一区二区三区 | 国产成人精品一区二区秒拍1o| 久久婷婷成人综合色| 精品乱人码一区二区二区| 宝贝腿开大点我添添公视频免| 一区二区三区鲁丝不卡| 亚洲日韩亚洲另类激情文学| 国产精品店无码一区二区三区| 狠狠色噜噜狠狠狠狠蜜桃| 少妇人妻偷人精品免费视频| 亚洲国产av区一区二| 四虎国产精品永久入口| 亚洲熟妇精品一区二区| 97色伦97色伦国产| 无码视频伊人| 国产专区一线二线三线码| 精品免费国产一区二区三区四区介绍 | 久久99热只有频精品8| 色视频不卡一区二区三区| 无码日韩av一区二区三区| 精品无码成人片一区二区| 免费看欧美日韩一区二区三区| 国产精品激情av在线播放| free性开放小少妇| 久久一日本道色综合久久| 粉嫩av蜜臀一区二区三区| 亚洲另类激情专区小说图片| 久久精品国产再热青青青| 精品午夜福利在线视在亚洲| 日本中文一区二区三区亚洲| 漂亮的保姆hd完整版免费韩国 | 无码国产精品一区二区av| 南康市| 国产一区在线播放av| 99在线精品视频观看免费|