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

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

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

      高維前綴和 (SOSDP)

      算法介紹——高維前綴和

      引入

      我們都知道二維前綴和有這么一個(gè)容斥的寫(xiě)法:

      for(int i=1;i<=n;i++){
          for(int j=1;j<=m;j++){
              s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
          }
      }
      

      那換成三維前綴和,就有如下容斥代碼:
      \( s[i][j][k]=a[i][j][k]+s[i-1][j][k]+s[i][j-1][k]+s[i][j][k-1]-s[i-1][j-1][k]-s[i-1][j][k-1]-s[i][j-1][k-1]+s[i-1][j-1][k-1] \)
      非常的繁瑣,于是就誕生了如下二維前綴和的寫(xiě)法:

      for(int i=1;i<=n;i++){
          for(int j=1;j<=m;j++){
              s[i][j]=s[i][j-1]+a[i][j];
          }
      } 
      for(int i=1;i<=n;i++){
          for(int j=1;j<=m;j++){
           	s[i][j]+=s[i-1][j];
          }
      }
      

      其實(shí)就是先統(tǒng)計(jì)列的前綴和,再統(tǒng)計(jì)行的前綴和。
      那三維前綴和只需要三遍 forforfor 就搞定了,明顯簡(jiǎn)單很多。

      這就啟發(fā)我們對(duì)于更高維度的前綴和,同樣只需要做 \(n\)\(n\)層 for 循環(huán)

      正文

      對(duì)于上面的 \(n\)\(n\)層for循環(huán) 的高維前綴和的代碼,其復(fù)雜度顯然不是我們能接受的,但是當(dāng)每一維很小時(shí)就可以進(jìn)行狀態(tài)壓縮
      最常見(jiàn)的就是每一維的大小為 \(2\) ,此時(shí)對(duì)于\(L\) 維數(shù)組就可以用一個(gè)長(zhǎng)度為 \(L\) 的二進(jìn)制數(shù)表示其中一個(gè)位置。

      for(int i=0;i<L;i++){
          for(int j=0;j<(1<<L);j++){
              if(j>>i&1){
                f[j]+=f[j^(1<<i)];
               }
          }
      }
      

      時(shí)間復(fù)雜度\(O(L\times2^L)\)

      子集求和

      對(duì)于一個(gè)二進(jìn)制數(shù) \(j\) ,如果另一個(gè)二進(jìn)制數(shù) \(i\) 滿(mǎn)足,\(i \operatorname{and} j=i\) , 就說(shuō) \(j\) 包含 \(i\) , 即 \(i\)\(j\) 的子集。
      那上面的代碼相當(dāng)于對(duì)每一個(gè) \(j\) 加上它的所有子集,我們稱(chēng)它為 子集求和

      超集求和

      對(duì)于一個(gè)二進(jìn)制數(shù) \(j\) ,如果另一個(gè)二進(jìn)制數(shù) \(i\) 滿(mǎn)足,\(i \operatorname{or} j=i\) , 此時(shí) \(i\) 包含 \(j\) , 即 \(j\)\(i\) 的子集,此時(shí)我們稱(chēng) \(i\)\(j\)超集
      與子集求和類(lèi)似的,我們有如下 超集求和 代碼:

      for(int i=0;i<L;i++){
          for(int j=0;j<(1<<L);j++){
              if(!(j>>i&1)){
                  f[j]+=f[j^(1<<i)];
              }
          }
      }
      

      應(yīng)用

      高維前綴和是計(jì)數(shù)的常用技巧,因此也被稱(chēng)為SOSDP

      其他

      高維前綴和有時(shí)會(huì)配合Lucas定理使用,參見(jiàn)Lucas定理入門(mén)


      例題

      Compatible Numbers

      \(a \operatorname{and} b = 0\) 等價(jià)于 \(a\)\(b\) 的補(bǔ)集的子集,因?yàn)轭}目要求輸出任意一個(gè)答案,所以只要把上述子集求和的代碼中得加操作改成賦值操作即可。

      #include<bits/stdc++.h>
      using namespace std;
      const int N=4e6+5;
      inline int read(){
          int w = 1, s = 0;
          char c = getchar();
          for (; c < '0' || c > '9'; w *= (c == '-') ? -1 : 1, c = getchar());
          for (; c >= '0' && c <= '9'; s = 10 * s + (c - '0'), c = getchar());
          return s * w;
      }
      int n;
      int a[N];
      int f[1<<22];
      signed main(){
      	n=read();
      	for(int i=1;i<=n;i++){
      		a[i]=read();
      		f[a[i]]=a[i];
      	}
      	for(int i=0;i<=21;i++) {
      		for(int j=0;j<(1<<22);j++) {
      			if((j&(1<<i))&&f[j^(1<<i)]) f[j]=f[j^(1<<i)];
      		}
      	}
      	for(int i=1;i<=n;i++){
      		int b=((1<<22)-1)^a[i];   //計(jì)算補(bǔ)集 
      		if(f[b]) printf("%d ",f[b]);
      		else printf("%d ",-1);
      	}
      	return 0;
      }
      
      

      [ARC137D] Prefix XORs

      設(shè) \(A_{i,j}\) 表示第 \(j\) 次操作后 \(A_i\) 的值,根據(jù)常識(shí)或手推可以知道:

      \[A_{n,k}=\oplus^n_{i=1} C^{k}_{n-i+k} \cdot A_{i,0} \]

      因?yàn)榕紨?shù)個(gè) \(A_i\) 異或起來(lái)的的結(jié)果為\(0\),所以 \(A_{i,0}\) 對(duì) \(A_{n,k}\) 有貢獻(xiàn)當(dāng)且僅當(dāng) \(C^{k}_{n-i+k}\) 為奇數(shù),即 $ C^{k}_{n-i+k} \equiv 1 \pmod 2 $,根據(jù) Lucas 定理可知,此時(shí) \(k\)\(n-i+k\) 的子集,即 $k \operatorname{and} (n-i) = 0 $,用高維前綴和預(yù)處理即可

      #include<bits/stdc++.h>
      using namespace std;
      const int N=1e6+5;
      inline int read(){
          int w = 1, s = 0;
          char c = getchar();
          for (; c < '0' || c > '9'; w *= (c == '-') ? -1 : 1, c = getchar());
          for (; c >= '0' && c <= '9'; s = 10 * s + (c - '0'), c = getchar());
          return s * w;
      }
      int n,m;
      int a[N]; 
      int f[1<<20];
      signed main(){
      	n=read(),m=read();
      	for(int i=1;i<=n;i++){
      		a[i]=read();
      	}
      	for(int j=0;j<n;j++) f[j]=a[n-j];
      	for(int i=0;i<=19;i++){
      		for(int j=0;j<(1<<20);j++){
      			if(j>>i&1){
      				f[j]^=f[j^(1<<i)];
      			}
      		}
      	}
      	for(int k=0;k<m;k++){     //k從0開(kāi)始 
      		printf("%d ",f[((1<<20)-1)^k]);   //求補(bǔ)集的答案 
      	}
      	return 0;
      }
      
      
      
      posted @ 2024-09-02 19:04  Green&White  閱讀(339)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 国产绿帽在线视频看| 国产成人高清亚洲综合| 久久视频这里只精品| 亚洲精品一区二区三区大桥未久| 熟女国产精品一区二区三| 亚洲乱熟女一区二区三区| 色欲综合久久中文字幕网| 18av千部影片| 亚洲伊人久久精品影院| 孝昌县| 亚洲欧美不卡视频在线播放| 一区二区三区精品视频免费播放| 免费国产女王调教在线视频| 狠狠综合久久av一区二| 国产激情一区二区三区午夜 | 少妇又爽又刺激视频| AV教师一区高清| 国产白袜脚足j棉袜在线观看| 亚洲国产天堂久久综合226114| 亚洲综合精品中文字幕| 777米奇色狠狠俺去啦| 宁乡县| 中文字幕人妻中文AV不卡专区| 久久精品国产福利一区二区| 少妇高潮灌满白浆毛片免费看| 国产偷拍自拍视频在线观看 | 欧美日韩视频综合一区无弹窗| 久女女热精品视频在线观看| 黄色大全免费看国产精品| 婷婷开心色四房播播| 国产精品亚洲二区在线播放| 亚洲天堂av在线免费看| 国产av永久无码天堂影院| 99国产精品欧美一区二区三区| 丝袜美腿亚洲综合第一页| 精品一精品国产一级毛片| 综合色在线| 自拍偷在线精品自拍偷99| 成人福利一区二区视频在线| 日本精品aⅴ一区二区三区| 日本偷拍自影像视频久久|