
Loj
穷源溯流
路很长,尽管走便是。
-
原创 LOJ #6282. 数列分块入门 6
这种题也可以用分块! 用 vector 维护每个整块内的元素,利用内置 insert 函数可以很方便的插入,但不要忘记 vector 是从下标 0 处开始计数 当 vector内的元素个数大于一定程度时,需要重新分块,因为 vector 插入的复杂度较高 const int N=1e5+5; int i,j,k; int n,m,t; int a[N<<1],block,num; //不断插入元素,数组开大一点 vector<in...2020-11-15 21:48:2834
0
-
原创 LOJ #6284. 数列分块入门 8
设置一个数组维护一个块内所有的数是否相等,若全部等于 x,则将数组标记为 x,这样在处理整块的数组时,只有 tag[]=-1 时需要操作,对于不是整块的暴力即可 const int N=1e5+5; int i,j,k; int n,m,t; int a[N]; int bel[N],num,block; int L[N],R[N],tag[N]; void build() { block=sqrt(n); num=n/bloc...2020-11-15 10:00:2927
0
-
原创 LOJ #6283. 数列分块入门 7
标记下传代码: const ll mod=10007; const int N=1e5+5; int i,j,k; int n,m,t; int a[N]; int bel[N],block,num,L[N],R[N]; int sum[N],tag[N]; //sum 表示块+,tag 表示块* void build() { block=sqrt(n); num=n/block; if(n%block) num++; ...2020-11-12 18:25:5927
0
-
原创 LOJ #6281. 数列分块入门 5
对于一个区间内开平方的复杂度是相当大的,但是只有当一个区间内有一个数 >=2 时才有资格开平方,所以添加一个数组来维护整个块是否需要开平方 const int N=5e4+5; int i,j,k; int n,m,t; int a[N]; int L[N],R[N]; int bel[N],block,num,sum[N],all[N]; void build() { block=sqrt(n); num=n/bloc...2020-11-12 09:00:1131
0
-
原创 LOJ #6280. 数列分块入门 4
利用分块,对于整块的再加一个区间和的数组来维护 然后一直 WA,看了看讨论的,要开 long long …… 可能是做法太暴力了吧 const int N=5e4+5; int i,j,k; int n,m,t; int a[N]; int L[N],R[N]; ll bel[N],block,num,sum[N],all[N]; void build() { block=sqrt(n); num=n/block; if(n...2020-11-12 08:23:0833
0
-
原创 LOJ #6279. 数列分块入门 3
根据分块的思想,对于不整块的我们直接暴力统计,但是对于整块的,我们可以对每一块进行一个排序,利用二分查找找出最大的小于 c的数,然后重复此操作即可 const int N=1e5+5; int i,j,k; int n,m,t; int a[N]; int L[N],R[N],bel[N],block,num; int tag[N],b[N]; void build() { block=sqrt(n); num=n/bloc...2020-11-11 21:33:4033
0
-
原创 LOJ #6278. 数列分块入门 2
根据分块的思想,对于不整块的我们直接暴力统计,但是对于整块的,我们可以对每一块进行一个排序,利用二分查找找出最小的大于 c*c 的位置,然后减去即可 //#pragma GCC optimize(2) //#include <bits/stdc++.h> #include <iostream> #include <cmath> #include <cstdio> #include <algorithm> #include <...2020-11-10 23:01:2832
0
-
原创 LOJ #6277. 数列分块入门 1
#include <bits/stdc++.h> #define null NULL using namespace std; const int N=5e4+5; int n,m,k; int a[N]; int l[N],r[N],belong[N]; void build() { int block=sqrt(n); if(n%block) block++; } int main() { cin>>n; f.2020-11-10 17:53:4623
0