分塊入門題

2021-08-29 07:54:09 字數 855 閱讀 6606

分塊入門題5:

給[l,r]取開方,乙個數字最多被取開方6次,那麼乙個塊內有需要開方的時候才對這個塊取開方,那麼最多6*n*sqrt(n)次,分塊直接寫

#includeusing namespace std;

typedef long long ll;

const int maxn=1e5+7;

int l[5500],r[5500],belong[105000];

int q1[105000],q2[105000];

int is[5005],mark[5005];

int n,block,num;

ll sum1[5005];

void build()

for(i=1;i<=num;i++)//這裡為第i塊的左區間與右區間

}int modify(int x,int y,int t)

} if(is[belong[x]]==0)mark[x]=1;

}else

} if(is[belong[x]]==0)mark[x]=1;

for(i=l[belong[y]];i<=y;i++)

} if(is[belong[y]]==0)mark[y]=1;

int left1,right1,mid1;

for(i=belong[x]+1;i}

if(is[i]==0)mark[i]=1;

}} }

}int res;

ll cnt;

int find1(int x,int y)else }}

int main()else

} return 0;

}

數論 分塊入門題

只有一行乙個整數 n 0 n 1000000 只有一行輸出,為整數m,即f 1 到f n 的累加和。答案即為1.x1.x的所有約數個數和。我們知道換種形式答案就是 i ni i ni 那麼暴力演算法來了 所以我們 for int i 1 i n i ans n i 就好了。由於n 1e6,所以這個o...

分塊 分塊練習三題

分塊嘛 馮巨道德午餐講過的 唯一不同的是可能需要st n ed n 來記錄一下範圍 例教主的魔法 板 include using namespace std define in read int in const int n 1e6 5 int n,q,a n b n add n int siz,m...

分塊模板題

題目描述 給出乙個長為n的數列,以及n個操作,操作涉及區間加法,單點查值。輸入格式 第一行輸入乙個數字 n 第二行輸入 n 個數字,第 i 個數字為a i 以空格隔開 接下來輸入 n 行詢問,每行輸入四個數字 opt,l,r,c,以空格隔開 若 opt 0,表示將 l,r 的之間的數都加 c 若 o...