#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个数属于第几个块
}
}
分块入门----------------模板
最新推荐文章于 2021-06-03 10:09:39 发布