分块入门----------------模板

#include<bits/stdc++.h>
using namespace std;
const int N=5e4+5;
int a[N];//原始序列
int l[N] ;//第i个块的左区间端点
int r[N];//第i个块的右区间端点 
int pos[N];//第i个点属于第几个块 
int main()
{
     
	int n;
	scanf("%d",&n);
	int dis=sqrt(n); //每一块的大小
	int num=ceil(n*1.0/dis);//分块数目
	for(int i=1;i<=num;i++)
	{
     
		l[i]=(i-1)*dis+1;//第i块的左区间端点
		r[i]=i*dis;//第i块的右区间端点 
	 } 
	 r[num]=n;//最后一块的右端点最大等于n

	 for(int i=1;i<=n;i++)
	 {
     
	 	scanf("%d",&a[i]);
	 	pos[i]=(i-1)/dis+1; //第i个数属于第几个块 
	
	  }

	
}

你可能感兴趣的:(分块)