摘要: 区间开平方直接上暴力即可。 因为一个数开几次就到1了。 维护一个区间最大值,当该区间最大值是1的时候直接return。 复杂度O(nlognlogn)? #include<bits/stdc++.h> using namespace std; const int maxn=1e5+100; int 阅读全文
posted @ 2021-07-21 20:24 zlc0405 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 前置结论:给出n个点,选择一个点p使得这个n个点到p的距离之和最小。 那么这个p一定是中间两个点的线段或中间一个点。 基于这个结论,考虑用线段树维护区间点权和和区间点权乘坐标的和。 然后对每个区间询问,二分出p的位置,对p之前和p之后的区间分类计算。 修改操作就是毒瘤离散化+模拟。 #include 阅读全文
posted @ 2021-07-21 20:22 zlc0405 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 暴力枚举两个端点,BFS算偏心距。 有O(n)的做法,跪了 #include<bits/stdc++.h> using namespace std; const int maxn=305; vector<pair<int,int> > g[maxn]; int n,s; int vis[maxn], 阅读全文
posted @ 2021-07-21 16:22 zlc0405 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 有一个数列,初始值均为0,他进行N次操作,每次将数列[ai,bi)这个区间中所有比Hi小的数改为Hi,他想知道N次操作后数列中所有元素的和。 //每次把比Hi小的数改成Hi //把所有询问按Hi从小到大排序 //暴力修改即可 #include<bits/stdc++.h> using namespa 阅读全文
posted @ 2021-07-21 16:21 zlc0405 阅读(42) 评论(0) 推荐(0) 编辑
摘要: 对于一个给定的序列a1, …, an,我们对它进行一个操作reduce(i),该操作将数列中的元素ai和ai+1用一个元素max(ai,ai+1)替代,这样得到一个比原来序列短的新序列。这一操作的代价是max(ai,ai+1)。进行n-1次该操作后,可以得到一个长度为1的序列。 我们的任务是计算代价 阅读全文
posted @ 2021-07-21 14:59 zlc0405 阅读(51) 评论(0) 推荐(0) 编辑
摘要: 题意简述:给定n个点排成一排,每个点有一个点权,多次改变某个点的点权并将最大点独立集计入答案,输出最终的答案 定义f(i,0)为第i个数不取,定义f(i,1)为第i个数取。 转移式子: f(i,0)=max(f(i-1,0),f(i-1,1)) f(i,1)=max(f(i-1,0)+a[i]) 可 阅读全文
posted @ 2021-07-21 14:56 zlc0405 阅读(42) 评论(0) 推荐(0) 编辑