![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Loj
穷源溯流
路很长,尽管走便是。
展开
-
Loj #2823. 「BalticOI 2014 Day 1」三个朋友(字符串hash)
题目需要会求修改后的哈希值题目中需要注意的 ’UNIQUE‘ 的时候是存在不相同的字符串,而不是不相同的位置const int N=2e6+5;const int base=2333; int n,m; int i,j,k; char s[N]; ull xp[N]; ull h[N];void init(){ xp[0]=1; for(int i=1;i<N;i++) xp[i]=xp[i-1]*base;...原创 2021-03-27 15:55:29 · 242 阅读 · 0 评论 -
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:28 · 343 阅读 · 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:29 · 381 阅读 · 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:59 · 258 阅读 · 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:11 · 295 阅读 · 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:08 · 218 阅读 · 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:40 · 257 阅读 · 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:28 · 416 阅读 · 0 评论 -
LOJ #6277. 数列分块入门 1
#include <bits/stdc++.h>#define null NULLusing 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:46 · 186 阅读 · 0 评论