随笔分类 - bzoj
摘要:#include#include#includeusing namespace std;#define MAXN 10001#define INF 2147483647typedef pair Point;int n,m,Ks[101];bool vis[101];int v[MAXN<<1],w[...
阅读全文
摘要:在模意义下枚举m进行验证,多设置几个模数,而且小一些,利用f(x+p)%p=f(x)%p降低计算次数。UOJ AC,bzoj OLE。#include#include#include#includeusing namespace std;#define MAXV 4951vectorv;typede...
阅读全文
摘要:orz PoPoQQQ。本来蒟蒻以为这种离散化以后就对应不起来的题不能权值分块搞的说。……结果,实际上>n的权值不会对答案作出贡献。#include#include#includeusing namespace std;#define N 200002#define BN 452int n,m,nu...
阅读全文
摘要:这题用了三种算法写:分块+二分:O(n*sqrt(n*log(n))函数式权值分块:O(n*sqrt(n))带修莫队+权值分块:O(n5/3)结果……复杂度越高的实际上跑得越快……最后这个竟然进第一页了……#include#include#include#includeusing namespace...
阅读全文
摘要:块大小为n2/3。把询问和修改分开。每次两个询问之间的修改进行暴力转移,如果修改在上一次询问的区间里,就会对当前状态形成影响。好慢。#include#include#include#includeusing namespace std;#define N 10001int num[N],n,m,b[...
阅读全文
摘要:考虑树状数组区间修改(只对其子树的答案有影响)点查询,每个点记录的是它到根路径上的权值异或和。答案时query(L)^query(R)^a[lca]。这种方法在支持区间加法、减法的树上询问的时候可以避免树链剖分。可能爆栈,考虑手动开栈。(诶诶Tarjan预处理lca的时候怎么没手动开栈?不要在意^_...
阅读全文
摘要:预处理出每个点到根节点的土路数,插到一个树状数组里,然后每次修改只会对子树中的节点造成影响,于是相当于区间修改、点查询了。#includeusing namespace std;#define N 250001int n,en,v[N<<1],next[N<<1],first[N],m;void A...
阅读全文
摘要:裸题,树状数组区间修改+单点查询。当然要稍微讨论一下链的左右端点是否修改的情况咯。#include#include#includeusing namespace std;#define N 300001int en,v[Nsiz[son[U]]) son[U]=v[i]; ...
阅读全文
摘要:离线后以宗教为第一关键字,操作时间为第二关键字排序。块状树,线下ac,线上tle……#include#include#include#include#includeusing namespace std;queueq;int f,c;inline void R(int &x){ c=0;f=1...
阅读全文
摘要:裸题,但是因为权在边上,所以要先把边权放到这条边的子节点上,然后进行链更新/查询的时候不能更新/查询其lca。#include#include#includeusing namespace std;#define N 100001#define BN 320#define INF 214748364...
阅读全文
摘要:裸题,直接上。复杂度O(n*sqrt(n)*log(n))。//Num[i]表示树中的点i在函数式权值分块中对应的点//Map[i]表示函数式权值分块中的点i在树中对应的点#include#include#includeusing namespace std;#define N 80001#defi...
阅读全文
摘要:先把整个矩阵处理成b[n][m-K+1]、c[n][m-K+1]大小的两个矩阵,分别存储每行每K个数中的最大、最小值,然后再通过b、c处理出d、e分别表示K*K大小的子矩阵中的最大、最小值即可。单调队列暴力。#include#includeusing namespace std;#define N ...
阅读全文
摘要:用两个单调队列维护序列中的最大值和最小值即可。poi~#include#includeusing namespace std;int m,n,head[2]={1,1},tail[2]={1,1},q[2][3000001],a[3000001],ans;int main(){ scanf("%d%...
阅读全文
摘要:枚举每个数,计算以其为次大数的最大区间,显然,只需要用这个区间的答案 对 答案进行更新即可。找到每个数右侧、左侧第1、2个比它大的数,然后分类讨论一下即可。找到的过程中把数sort以后,从大到小把它们的位置插入set,稍微维护一下即可。#include#include#includeusing na...
阅读全文
该文被密码保护。
摘要:对原序列取前缀异或值,变成pre[1...N],然后询问等价于求max{a[N]^x^pre[i]}(l-1#define INF 2147483647#define N 300001#define MAXBIT 25int root[N=0;--i) { int Bit=(...
阅读全文
摘要:枚举每个文章里已经在Trie中被标记为可能是分割处的字符,然后再从此处跑Trie,继续向后标记。由于单词数很少,因此复杂度可以接受,O(n*m*Len)。#include#includeusing namespace std;int n,m,L;char s[1024*1024+100];int c...
阅读全文
摘要:f(i)=min{f(j)+(D(j)using namespace std;#define N 1000001struct Point{int x,y;};bool operator =b.y;}int n,m,K,q[N];Point dp[N];int main(){ scanf("%d",&...
阅读全文
摘要:因为所有点权都是正的,所以对每个结点u来说,每条从根到它的路径上只有最多一个结点v符合d(u,v)=S。所以我们可以边dfs边把每个结点的前缀和pre[u]存到一个数据结构里面,同时查询pre[u]-S是否存在。数据结构用set、hashtable(随便卡)(需要支持删除,由于总是删掉最后一个,因此...
阅读全文
摘要:模板题。#include#include#include#includeusing namespace std;#define MAXN 20001#define INF 2147483647typedef pair Point;int n,K,ans,T[3];int v[MAXN<<1],w[M...
阅读全文

浙公网安备 33010602011771号
