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

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

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

      Codeforces 1603D. Artistic Partition

      題目鏈接:D - Artistic Partition

      題目大意:要求將 \([1,n]\) 分成 \(k\) 段,使得每段對應的 \(c(l,r)\) 之和最小,其中 \(c(l,r)=\sum_{i=l}^r\sum_{j=i}^r[\gcd(i,j)\ge l]\)

      首先注意到當 \(r<2l\) 時,\(c(l,r)=r-l+1\)。所以當 \(2^k-1\ge n\) 時答案即為 \(n\)

      考慮 \(\texttt{DP}\),設 \(f_{i,j}\) 表示已經分了 \(i\) 段,段末為 \(j\) 的最小值,則轉移式為 \(f_{i,j}=\min\{f_{i-1,k}+c(k+1,j)\}\)

      考慮轉移過程中,每次 \(j-1\)\(j\) 對每個 \(f_{i-1,k}+c(k+1,j)\) 造成的影響。需要快速維護每個 \(k\) 對應值的變化量,即 \(c(k+1,j)-c(k+1,j-1)\),顯然這個值為 $\sum_{i=k+1}^{j} [\gcd(i,j)\ge k+1] $。

      由于 \(i<j\) 時,\(\gcd(i,j)\le i\),于是就相當于要對每個位置 \(k\) 加上 $\sum_{i=1}^{j} [\gcd(i,j)\ge k+1] $。進一步地,其實就是加上 \(j-\sum_{i=1}^{j} [\gcd(i,j)\le k]\)。眾所周知,\(\gcd(i,j)\) 的取值只可能是 \(j\) 的約數,那么把 \(j\) 的所有約數 \(d_i\) 求出來,每次將區間 \([d_{i},d_{i+1})\) 加上對應貢獻即可。初始貢獻為 \(j\),當 \(i\) 每次加一時貢獻會減少 \(\varphi(\frac{j}{d_i})\),這是與 \(j\)\(\gcd\) 的值為 \(d_i\) 的方案數。處理完每個位置的變化量后,當前的全局最小值即為 \(f_{i,j}\) 的值。

      時間復雜度方面,相當于在每一層轉移中,對于每對 \((j,d_i)\) 都要進行一次線段樹的區間加操作,那么顯然是一個 \(O(n\log^3n)\) 的復雜度。于是為了卡常,需要將這個區間加變成后綴加才可通過此題。

      #include<bits/stdc++.h>
      using namespace std;
      #define N 100010
      #define ls o<<1
      #define rs o<<1|1
      #define LL long long
      int T,n,k,cnt,p[N],v[N],phi[N];
      LL f[20][N];
      vector<int>d[N];
      struct rua
      {
      	LL tag,mn;
      }t[N<<2];
      void Build(int o,int l,int r,int i)
      {
      	t[o].tag=0;
      	if(l==r){
      		t[o].mn=f[i][l];
      		return;
      	}
      	int mid=l+r>>1;
      	Build(ls,l,mid,i);
      	Build(rs,mid+1,r,i);
      	t[o].mn=min(t[ls].mn,t[rs].mn);
      }
      void add(int o,int tl,int tr,int l,int r,int c)
      {
      	if(l<=tl && tr<=r){
      		t[o].tag+=c;
      		t[o].mn+=c;
      		return;
      	}
      	int mid=tl+tr>>1;
      	if(l<=mid)add(ls,tl,mid,l,r,c),t[rs].tag+=c,t[rs].mn+=c;
      	else add(rs,mid+1,tr,l,r,c);
      	t[o].mn=min(t[ls].mn,t[rs].mn)+t[o].tag;
      }
      void pretype()
      {
      	phi[1]=1;
      	for(int i=2;i<N;i++){
      		if(!v[i])p[++cnt]=i,phi[i]=i-1;
      		for(int j=1;j<=cnt && i*p[j]<N;j++){
      			v[i*p[j]]=1;
      			if(i%p[j]==0){
      				phi[i*p[j]]=phi[i]*p[j];
      				break;
      			}
      			phi[i*p[j]]=phi[i]*phi[p[j]];
      		}
      	}
      	for(int i=1;i<N;i++)
      	for(int j=i;j<N;j+=i)
      		d[j].push_back(i);
      	memset(f,0x3f,sizeof(f));
      	for(int i=1;i<N;i++)f[1][i]=1ll*i*(i+1)/2;
      	for(int i=2;i<=17;i++){
      		LL v=0;
      		Build(1,1,N-1,i-1);
      		for(int j=1;j<N;j++){
      			v+=j;
      			for(auto k:d[j])add(1,1,N-1,k,N-1,-phi[j/k]);
      			f[i][j]=v+t[1].mn;
      		}
      	}
      }
      int main()
      {
      	pretype();
      	scanf("%d",&T);
      	while(T--){
      		scanf("%d%d",&n,&k);
      		if(k>20 || (1<<k)-1>=n)printf("%d\n",n);
      		else printf("%lld\n",f[k][n]);
      	}
      }
      
      posted @ 2023-06-23 21:21  DeaphetS  閱讀(40)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 开心一区二区三区激情| 99RE8这里有精品热视频| 九九热精品在线观看| 亚洲免费成人av一区| 3d全彩无码啪啪本子全彩| 91亚洲国产三上悠亚在线播放| √新版天堂资源在线资源 | 大战丰满无码人妻50p| 午夜男女爽爽影院在线| 国产精品天干天干综合网| 精品国产成人一区二区| 欧洲lv尺码大精品久久久| 粉嫩在线一区二区三区视频| 黑森林福利视频导航| 亚洲男人第一无码av网站| 精品免费看国产一区二区| 成人午夜大片免费看爽爽爽| 国内熟妇人妻色在线视频| 岛国av在线播放观看| 男人猛躁进女人免费播放| 熟妇人妻系列aⅴ无码专区友真希| 九九热热久久这里只有精品| 国产AV影片麻豆精品传媒| 无码人妻丝袜在线视频| аⅴ天堂国产最新版在线中文| 成人免费精品网站在线观看影片| 国产精品永久在线观看| 亚洲の无码国产の无码步美| 四虎精品国产永久在线观看| 亚洲一区中文字幕第十页| 欧美国产日韩在线三区| 婷婷综合亚洲| 玉树县| 九九热免费公开视频在线| 四虎永久精品免费视频| 高清自拍亚洲精品二区| 久久青青草原国产精品最新片| 日日碰狠狠添天天爽超碰97| 国产免费高清69式视频在线观看 | 亚洲精品日产AⅤ| 亚洲中文字幕精品第三区|