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

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

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

      進階分塊

      分塊二分:

      眾所周知,分塊可以實現一些奇奇怪怪的區間的問題,比如以下這個題:
      給定一個 \(N\)\(N\) 個整數,分別為 \(A_1,A_2,A_3,A_4....A_N\) 每次詢問給出三個整數 \(l,r,k\) 求所有滿足 \(l \leq i \leq r,a_i \leq k\) 的個數。
      不難想到暴力,可以做到每次操作 \(N \log_2 N\) 總計 \(MN \log_2 N\) 但這樣的復雜度在 \(N,M \leq 100000\) 時是不容易過掉的。因此考慮優化它。
      如果用分塊該如何實現呢?
      可以把每一個塊內的元素排序,然后整塊時直接二分答案,散塊暴力處理,這樣就能將時間復雜度降至 \(O(Q\sqrt N \log_2 N)\) 但這樣是不容易過的,因此繼續考慮優化它,不難想到,當整塊時,塊長越大,\(\log_2 (r-l+1)\) 是基本不變的,但是可以減少塊的數量,因此我們可以將塊長設為 \(N/\sqrt{N\log N}\) 這樣做復雜度可以近似 \(O(N\sqrt{Q \log_2 N})\) 可以通過此題。

      樣例:
      block.in

      5 3
      1 2 3 4 5
      1 5 3
      1 4 3
      2 5 2
      

      block.out

      3
      3
      1
      

      代碼:

      //writer : tomxi  
      #include<cstdio>
      #include<algorithm>
      #include<iostream>
      
      using std::sort;
      const int N=1e5+5;
      const int K=300;
      int a[N],d[N],n,q,l,r,left,right,lk,rk,belong[N],L[K],R[K],len,k;
      
      inline int query(int lf,int rt,int val){
      	lk=belong[lf],rk=belong[rt];
      	int ans=0;
      	if(lk==rk){
      		for(int i=lf;i<=rt;i++) if(a[i]<=val) ans++;
      		return ans;
      	}
      	for(int i=lf;i<L[lk+1];i++) if(a[i]<=val) ans++;
      	for(int i=rt;i>R[rk-1];i--) if(a[i]<=val) ans++;
      	for(int i=lk+1;i<=rk-1;i++){
      		left=L[i],right=R[i];
      		int res=0;
      		while(left<=right){
      			int mid=(left+right)>>1;
      			if(d[mid]<=k){
      				res=mid-L[i]+1;
      				left=mid+1;
      			}else{
      				right=mid-1;
      			}
      		}
      		ans+=res;
      	}
      	return ans;
      }
      int main(){
      	scanf("%d%d",&n,&q);
      	len=sqrt(n*25);
      	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
      	for(int i=1;i<=n;i++) d[i]=a[i];
      	for(int i=1;i<=n;i++) belong[i]=(i-1)/len+1; 
      	for(int i=1,j=n;i<=n;i++,j--){
      		R[belong[i]]=i;L[belong[j]]=j;
      	}	
      	for(int i=belong[1];i<=belong[n];++i) sort(d+L[i],d+R[i]+1);
      	while(q--){
      		scanf("%d%d%d",&l,&r,&k);
      		printf("%d\n",query(l,r,k));
      	}
      	return 0;
      }
      
      posted @ 2024-03-07 21:22  tomxi  閱讀(64)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产成人精品无人区一区| 久久精品国产免费观看频道| 亚洲中文字幕久久精品蜜桃| 亚洲av日韩av一区久久| 97超级碰碰碰碰久久久久| 一区二区三区国产综合在线| 一区二区中文字幕久久| 久久精品不卡一区二区| 国产色a在线观看| 国内精品视频一区二区三区| 精品国产精品中文字幕| 在线观看无码av免费不卡网站 | 中文字幕一区二区久久综合| 国产精品av中文字幕| 国产成人高清精品亚洲| 国产亚洲av产精品亚洲| 欧美国产精品不卡在线观看| 无码一区二区三区久久精品| 国产又色又爽又黄的免费软件| 色久综合色久综合色久综合| 欧美丰满熟妇xxxx性| 亚洲AV国产福利精品在现观看| av在线播放无码线| 欧美做受视频播放| 无码中文字幕av免费放| 乃东县| 国产乱码日韩亚洲精品成人| 中文字幕永久精品国产| 日韩高清亚洲日韩精品一区二区| 中文字幕久久精品波多野结| 日韩本精品一区二区三区| 中文激情一区二区三区四区| 亚洲午夜理论无码电影| 99久久er热在这里只有精品99| 亚洲成色在线综合网站| 免青青草免费观看视频在线| 性色在线视频精品| 国产欧洲欧洲久美女久久| 国产色精品久久人妻| 日韩一区二区三区不卡片| 日韩av综合免费在线|