当前位置: 首页 > wzjs >正文

wordpress百度网盘插件北京网站seo费用

wordpress百度网盘插件,北京网站seo费用,专业的营销型网站公司,黄山公司做网站D. Maximize the Root 题目&#xff1a; 思路&#xff1a; 树上二分&#xff0c;中下题 我们可以发现如果 x 可以&#xff0c;那么 x - 1 肯定也可以&#xff0c;所以可以直接二分答案 具体的&#xff0c;我们每次二分能增加的值 mid &#xff0c;如果 a[i] < mid&#xf…

D. Maximize the Root

题目:

 

思路:

树上二分,中下题

我们可以发现如果 x 可以,那么 x - 1 肯定也可以,所以可以直接二分答案

具体的,我们每次二分能增加的值 mid ,如果 a[i] < mid,那么子树就要 a[i] + a[i] - mid 个,否则直接递归子树即可,以此类推,具体实现看代码

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <memory>
using namespace std;
#define int long long
#define yes cout << "Yes\n"
#define no cout << "No\n"void solve()
{int n;cin >> n;vector<int> a(n + 1);vector<vector<int>> g(n + 1);for (int i = 1; i <= n; i++){cin >> a[i];}for (int i = 2; i <= n; i++){int p; cin >> p;g[p].push_back(i);}if (n == 1){cout << a[1] << endl;return;}auto check = [&](int need) ->bool{int flag = 1;auto dfs = [&](auto self,int fa,int needval) ->void{if (!flag){return;}if (fa != 1)needval += max(needval - a[fa], 0LL);if (needval > a[fa] && g[fa].empty() || needval > 1e9){flag = 0;return;}for (auto& son : g[fa]){self(self, son, needval);}};dfs(dfs, 1, need);return flag;};int l = 0, r = 1e9;while (l + 1 < r){int mid = l + r >> 1;if (check(mid)){l = mid;}else{r = mid;}}if (check(r)){cout << a[1] + r << endl;return;}cout << a[1] + l << endl;
}signed main()
{cin.tie(0)->sync_with_stdio(false);int t = 1;cin >> t;while (t--){solve();}return 0;
}


C. Serval and Toxel's Arrays

题目:

思路:

很考验实现方式的一题

遇到这种题,我们要知道拆分,即把每个数的奉献算出来再累加即可

对于一个数 x,如果 我们选了一个 没有 x 的数组,那么奉献就是 1,取有 x 的数列,奉献也是 1,但是这是两种不同的取法,所以我们可以分开计算(特别的一共有 m + 1个数组,因为还有初始数组)

对于第一种取法,那么就是 cnt += xhas * (m + 1 - xhas),其中 xhas 为 x 的数量

对于第二种取法,有 cnt += xhas * (xhas-1) / 2

由于 n + m 不是很大,所以枚举 n+m 的每一个数是可行的,那么如何快速计算 xhas 成了问题

我们可以这样想,由于每次只改变一个数,那么也就是说如果某个数一直没改变,那么最后肯定有 m + 1 个,而如果中间改变过,那么肯定在改变之前这个数就一直存在了,也就是连续的某一段全含有 x,所以我们可以存储 last[i] 代表上一个数是否存在,以及如果存在它的位置在哪里

这样我们就解决了 xhas 的问题,具体实现看代码

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <memory>
using namespace std;
#define int long long
#define yes cout << "Yes\n"
#define no cout << "No\n"void solve()
{int n, m;cin >> n >> m;vector<int> a(n+1),last(n+m+1,-1),cnt(n+m+1,0);for (int i = 1; i <= n; i++){cin >> a[i];last[a[i]] = 0;}for (int i = 1; i <= m; i++){int p, v;cin >> p >> v;if (a[p] != v){cnt[a[p]] += i - last[a[p]];last[a[p]] = -1;last[v] = i;a[p] = v;}}int res = 0;for (int i = 1;i <= n+m;i++){if (last[i] != -1){cnt[i] += m - last[i] + 1;}}for (int i = 1; i <= n + m; i++){res += cnt[i] * (m + 1 - cnt[i]);res += cnt[i] * (cnt[i] - 1) / 2;}cout << res << endl;
}signed main()
{cin.tie(0)->sync_with_stdio(false);int t = 1;cin >> t;while (t--){solve();}return 0;
}

http://www.dtcms.com/wzjs/580387.html

相关文章:

  • 京东联盟网站建设电脑版红鹰微信管理系统
  • 中国空间站照片《企业宣传片制作》
  • 网站开发实施计划做系统网站信息检索网站
  • 大兴黄村网站建设公司html5网站制作编辑源码
  • 如何用自家电脑做网站服务器邯郸网站建设市场
  • 最大网站建设公司排名原创小说手机网站制作需要多少钱
  • 七星彩网站开发公司郑州seo
  • 鼓楼做网站网站建设如何获取客户
  • 广西网站运营最好的公司建设银行瓶窑支行网站
  • 网站后台忘记密码wordpress 图片保护
  • 宁波做网站建设深圳电子商城网站设计
  • 培训网站建设方案书株洲企业关键词优化最新报价
  • 提升网站页面打开速度内蒙古建设网站
  • 有免费做海报的网站吗阳江网雨大医院
  • 怎么做网站推广排名优化哪家专业
  • 营销型网站欣赏厦门成交型网站建设公司
  • 手机网站拒绝访问怎么解决如何设置标签wordpress
  • 南昌网站建设行业现状丰镇市网站丰镇高铁在哪个位置建设
  • 用dw做网站的过程网站建设实训报告2000字
  • 网站开发价位评估百度推广登录入口登录
  • 河北pc端网站开发做部队网站技术
  • 一般云主机可以做视频网站吗国外企业网络研究
  • 网站关键词优化的步骤和过程vr网站建设
  • 本地邵阳网站建设温州门户网站
  • 中国城市建设网网站什么是网络营销有哪些特点
  • 兰州市生态建设管理局网站网络公司网站建设方案
  • 网站建设整体设计思路公司网站怎么修改
  • 长春市快速建站网站wordpress突然很卡
  • 保定php网站制作浏阳网站定制
  • 提高分辨率网站wordpress模板top破解版