分塊入門題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...