2022-04-01每日刷题打卡
2022-04-01每日刷题打卡
代码源——每日一题
Lusir的游戏 - 题目 - Daimayuan Online Judge
如果 H(k+1)>E,那么 Lusir就失去 H(k+1)−E 的能量值,否则他将得到 E−H(k+1) 的能量值。
游戏目标是到达第 N 个建筑,在这个过程中能量值不能为负数个单位。
现在的问题是 Lusir 至少以多少能量值开始游戏,才可以保证成功完成游戏?
第一行输入整数 N。 第二行是 N 个空格分隔的整数,H(1),H(2),…,H(N) 代表建筑物的高度。
输出一个整数,表示所需的最少单位的初始能量值上取整后的结果。
5
3 4 3 2 4
4
题目说要最初始能量最低,那么到达终点时所剩能量应该是0(能省则省)
然后每跳一格,能量变化为:(e是下一层所剩能量,E是当前能量,H是下一层的高)
#include<iostream>
using namespace std;
#include<vector>
int main()
{//e是能量到达最后一层剩的能量int n,e=0;cin>>n;vector<int>v(n);for(int i=0;i<n;i++)cin>>v[i];//e是下一层时剩的能量,E是当前层能量,h是下一层的高//e=E+(E-h) ——> e=2E-h ——> E=(e+h)/2 ——>(为了向上取整我们将分数式+1)E=(e+h+1)/2//此时逆推,E就是上一层能量,e是当前能量for(int i=n-1;i>=0;i--){e=(e+v[i]+1)/2;}cout<<e<<endl;return 0;
}
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<math.h>
#include<set>
#include<numeric>
#include<string>
#include<string.h>
#include<iterator>
#include<map>
#include<unordered_map>
#include<stack>
#include<list>
#include<queue>
#include<iomanip>#define endl '\n';
typedef long long ll;
typedef pair<ll, ll>PII;
int mx = 0;
bool check(ll x, vector<int>& v, int n)
{for (int i = 0; i < n; i++){x = x + (x - v[i]);if (x < 0)return false;if (x > mx)return true;}return true;
}int main()
{ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int n, e = 0;cin >> n;vector<int>v(n);for (int i = 0; i < n; i++){cin >> v[i];mx = max(mx, v[i]);}int l = 0, r = 1e6;while (l < r){ll mid = (l + r) / 2;if (check(mid,v,n))r = mid;else l = mid + 1;}cout << l << endl;return 0;
}
洛谷——线段树
P3368 【模板】树状数组 2 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题目描述
如题,已知一个数列,你需要进行下面两种操作:
- 将某区间每一个数数加上 x*;
- 求出某一个数的值。
输入格式
第一行包含两个整数 N*、*M,分别表示该数列数字的个数和操作的总个数。
第二行包含 N 个用空格分隔的整数,其中第 i 个数字表示数列第 i 项的初始值。
接下来 MM 行每行包含 2 或 4个整数,表示一个操作,具体如下:
操作 11: 格式:1 x y k
含义:将区间 [x,y] 内每个数加上 k;
操作 22: 格式:2 x
含义:输出第 xx 个数的值。
输出格式
输出包含若干行整数,即为所有操作 2 的结果。
输入输出样例
输入 #1
5 5
1 5 4 2 3
1 2 4 2
2 3
1 1 5 -1
1 3 5 7
2 4
输出 #1
6
10
昨天的打卡笔记我们说了带懒惰标记的线段树,可以做到区间修改和区间求和。但这次是区间修改和单点求值。这里就要用到一个新的操作:标记下传。
昨天的时候说了,我们可以通过给管理一段区间的父节点打上一个懒惰标记,来做到logn的复杂度内把区间的点都加上k。但是此时那些点的值并没有被修改。所以如果我们单点求值时就会暴露了。此时我们就可以把父节点的懒惰标记下传给孩子。区间修改的时候,我们仍然是给父节点打上标记。此时还不下传给孩子,当我们单点查询时,再把标记下传给孩子,这样就方便了很多。
下传标记时,我们把当前父节点的标记赋给两个孩子的标记数组:lz[k+k+1]+=lz[k]、lz[k+k]+=lz[k]。同时把当前父亲节点的标记清空。就这样一层层往下传。当到底的时候,我们把lz标记加到叶节点上,再把lz清空,这样就做到了修改+查询。要注意的是,此过程还要更新父节点的值。更新的方法就和建造树时一样。
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<math.h>
#include<set>
#include<numeric>
#include<string>
#include<string.h>
#include<iterator>
#include<map>
#include<unordered_map>
#include<stack>
#include<list>
#include<queue>
#include<iomanip>#define endl '\n';
typedef long long ll;
typedef pair<ll, ll>PII;
ll n, m, a[500050], f[2000050],lz[2000050];void buildtree(int k, int l, int r)
{if (l == r){//到达叶节点后把值赋给树状数组f[k] = a[l];return;}int m = (l + r) / 2;//以m为中点分成左右buildtree(k + k, l, m);//左buildtree(k + k + 1, m + 1, r);//右f[k] = f[k + k] + f[k + k + 1];//父节点值是两个子节点的和
}void add(int k, int l, int r, int x, int y, ll c)
{if (l == x && y == r){lz[k] += c;return;}f[k] += (y - x + 1) * c;int m = (l + r) / 2;if (y <= m)add(k + k, l, m, x, y, c);elseif (x > m)add(k + k + 1, m+1, r, x, y, c);else{add(k + k, l, m, x, m, c);add(k + k + 1, m + 1, r, m + 1, y, c);}
}ll calc(int k, int l, int r, int x)
{if (l == r){f[k] += lz[k];lz[k] = 0;return f[k];}lz[k + k] += lz[k];lz[k + k + 1] += lz[k];lz[k] = 0;int m = (l + r) / 2;if (x <= m)return calc(k + k, l, m, x);elsereturn calc(k + k + 1, m + 1, r, x);f[k] = f[k + k] + f[k + k + 1];
}int main()
{ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);cin >> n >> m;for (int i = 1; i <= n; i++)cin >> a[i];buildtree(1, 1, n);while (m--){int t;cin >> t;if (t == 1){int x, y, c;cin >> x >> y >> c;add(1, 1, n, x, y, c);}else{int x;cin >> x;cout << calc(1, 1, n, x) << endl;}}return 0;
}
2022-04-01每日刷题打卡相关推荐
- 2022.10.14每日刷题打卡
リモコン 题意: 题目描述: 高桥君要调整空调的设定温度.现在的设定温度是A度,而他想调到B度. 空调遥控器按一次可以: 上调或下调1度 上调或下调5度 上调或下调10度 高桥君想求出从A调到B度的最 ...
- 2022.11.14每日刷题打卡
过山车 原题链接:传送门 二分图最大匹配模板题,但sb了数组开小了一直TLE,虽然是模板但很长教训. #include <bits/stdc++.h> using namespace st ...
- 2022-03-10每日刷题打卡
2022-03-10每日刷题打卡 力扣--每日一题 589. N 叉树的前序遍历 给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 . n 叉树 在输入中按层序遍历进行序列化表示,每 ...
- 2022-04-14每日刷题打卡
2022-04-14每日刷题打卡 代码源--每日一题 上帝的集合 - 题目 - Daimayuan Online Judge 题目描述 现在上帝有一个空集合,现在他命令你为他执行下列三种操作 n 次, ...
- 2021-12-11每日刷题打卡
2021-12-11每日刷题打卡 力扣--剑指offer 剑指 Offer 40. 最小的k个数 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字, ...
- 2022-03-02每日刷题打卡
2022-03-02每日刷题打卡 代码源--div2每日一题 Alice的德州扑克 - 题目 - Daimayuan Online Judge 德州扑克是目前世界上最流行的扑克游戏,全世界有众多相关的 ...
- 2022-03-03每日刷题打卡
2022-03-03每日刷题打卡 力扣--每日一题 258. 各位相加 给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数.返回这个结果. 示例 1: 输入: num = 38 输出 ...
- 2022-03-31每日刷题打卡
2022-03-31每日刷题打卡 代码源--每日一题 完美数 - 题目 - Daimayuan Online Judge 对于给定的数字 a , b ,当整数 n 在十进制下的所有数位都为 a 或 b ...
- 2022-02-15每日刷题打卡
2022-02-15每日刷题打卡 AcWing--算法基础 900. 整数划分 - AcWing题库 一个正整数 n 可以表示成若干个正整数之和,形如:n=n1+n2+-+nk,其中 n1≥n2≥-≥ ...
最新文章
- wget使用代理下载
- 如何在BIOS里设置定时关机?
- MySQL复制的奇怪问题
- docker下MySQL修改配置并重启生效:表名不区分大小写
- ldap基本dn_LDAP 中 DN CN DC OU
- 软考系统架构师笔记-最后知识点总结(二)
- c# 两个list比较_C# for Grasshopper Day 22 学习笔记
- 这是一个关键……可是这个门槛我上不去了
- linux内核启动地址的确定
- ————————————————素数的快速判断方法————————————————————...
- SQL Server 不允许保存更改。您所做的更改要求删除并重新创建一下表。您对无法重新创建的表进行了更改或启用了“阻止保存要求重新创建表的更改”选项
- HTML网页之日历代码
- localstorage在safri下的坑
- Python 程序员需要知道的 30 个技巧(转载)
- 人们已经离不开5G了,商用三年半,中国5G发展迈向新征程,产业发展全面提速!
- 为什么程序员下班后从来不关电脑?
- CTFSHOW: 36D杯 misc ez-qrcode
- python欧拉螺线_基于菲涅耳积分的Python OpenDrive地图螺旋线/回旋线/欧拉螺旋线/Cornu螺旋线插值...
- 插画师的配色灵感分享
- 冰箱智能感应开灯,飞睿科技雷达传感器应用,雷达感应技术发展
热门文章
- java星座测试需求分析_如何进行软件测试需求分析
- 解决每次新建word都有页眉和页脚
- 考研必备 | 百度网盘网页视频在线倍速播放
- 三个基本的布尔逻辑算符是_什么是布尔逻辑运算符?布尔逻辑运算符一共有哪几种?...
- 软件项目管理-第三章生存期模型
- “胡”说IC——菜鸟工程师完美进阶
- 极速office(Word)怎么调出标尺
- C++23种设计模式(22)-中介者模式
- 金融数据智能峰会 | 数据规模爆炸性增长,企业如何进行精准决策?云原生数据仓库数据化运营实战分享
- 15款最好用的腾讯短链接(url.cn接口)批量在线生成接口