首页 > 其他分享 >Valhalla Siege 题解

Valhalla Siege 题解

时间:2023-05-03 15:14:01浏览次数:46  
标签:loc le ll Siege 题解 sum long 武士 Valhalla

题目传送门

一道二分题。

先观察数据范围,\(1\le n,q\le 200,000\),显然需要 \(O(n\log n)\) 的复杂度。且 \(1\le k_i\le 10^{14}\),需要开 long long

我们需要二分到第一个血量大于伤害值的武士的位置,前面的武士都死了。而在 C++ 算法库中,有一个函数 upper_bound(底层原理是二分)正好可以帮助我们实现此功能。

另外,为了优化时间复杂度,我们选择用前缀和来存储武士们的血量与伤害。

Code

#include <bits/stdc++.h>
#define ll long long
#define INF 1e9
using namespace std;
ll n, q, d; // d 表示伤害
ll sum[200005]; // 前缀和
signed main() {
    ios :: sync_with_stdio(0);
	cin >> n >> q;
	for (int i = 1; i <= n; i++) {
		ll x;
        cin >> x;
		sum[i] = sum[i - 1] + x;
	}
	for (int i = 1; i <= q; i++) {
        ll x;
		cin >> x;
		d += x;
		ll loc = upper_bound(sum + 1, sum + n + 1, d) - sum; // 查找第一个血量大于伤害的武士的位置  
        loc--; // 死了多少个武士 
		if (loc >= n) { // 全死了的情况
            d = 0; // 伤害清零
			cout << n << "\n"; // 全部复活,所以有 n 个武士
		}
		else cout << n - loc << "\n"; // 剩余的武士
	}
}


标签:loc,le,ll,Siege,题解,sum,long,武士,Valhalla
From: https://www.cnblogs.com/xvl-/p/17369076.html

相关文章

  • [蓝桥杯 2017 国 C] 合根植物 题解
    题目传送门一道并查集模板题。没什么好说的,先给个并查集模板,神犇可以直接跳过。查找根:intfind_root(intn){if(fa[n]==n)returnn;returnfa[n]=find_root(fa[n]);}合并:voidmerge(intx,inty){intsx=find_root(x),sy=find_root(y);......
  • Cashier 题解
    题目传送门一道贪心题。我们可以记录每一位客人离开的时间,当下一位客人来临时,他们之间空闲的时间就是我们休息的时间。for(inti=1;i<=n;i++){intt,l;cin>>t>>l;ans+=(t-endt)/a;endt=t+l;}最后再加上所有客人都走后的空闲时间......
  • [ABC213D] Takahashi Tour 题解
    题目传送门一道dfs序题。题目中高桥每次只会去最小的那个点,所以要先对整张图进行排序。for(inti=1;i<=n;i++)sort(g[i].begin(),g[i].end());然后考虑dfs。高桥不会走重复的点,所以我们可以开一个vis数组进行标记。然后我们需要处理高桥君如果无路可走会返回上......
  • Codeforces Round 869 (Div. 2) A-D题解
    比赛地址A.Politics题意:有n个人对m个决案进行投票,对于每一个决案如果票数相同则所有人都离场,反之票数少的一方离场,现在提前知道了每个人的意见,让一些人参与投票,在保证第一个人不离场的情况下最终剩余人数最多是多少Solution把和第一个意见不同的给去掉就行了voidsolve(){......
  • AT_abc106_d [ABC106D] AtCoder Express 2 题解
    题目传送门解题思路区间\(dp\)。划分阶段:以左右城市之间的列车数量为阶段。状态表达:设\(f_{i,j}\)为城市\(i\)与城市\(j\)之间的列车数量。状态转移:由图可知,城市\(l\)与城市\(r\)之间的列车数量,就是城市\(l\)与城市\(r-1\)之间的列车数量与城市\(l+1\)与......
  • CF1817C Similar Polynomials 题解
    可能更好的阅读体验题目传送门Div.1C拉格朗日差值,赛时开香槟。题目大意给定\(d\)次两个多项式\(A(x),B(x)\)。求\(s\),使得\(B(x)\equivA(x+s)\pmod{10^9+7}\),保证\(s\)存在。给出多项式的形式为给出\(x=0,1,\cdots,d\)模\(10^9+7\)的值。\(d\le2.5\times......
  • CF三月D题题解
    cf1798d题意:重排序列,使得其中连续子序列和的绝对值最大的最大值小于序列最大值减最小值,序列和为0考虑这样一种构造方案:正负数分类,0直接不管然后记录当前和sum,当sum非负时,加上一个负数,当sum是负数时,加上一个正数即可正确性证明:显然前缀和都是合法的。考虑计算前缀和数组,满足......
  • 「BZOJ2144」跳跳棋-题解
    「BZOJ2144」跳跳棋个人评价挺好的一道题,难点在于想到树这个结构和建树1题面跳跳棋是在一条数轴上进行的。棋子只能摆在整点上。每个点不能摆超过一个棋子。我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置。我们要通过最少的跳动把他们的位置移......
  • Educational Codeforces Round 147 (Rated for Div. 2) 题解
    ALink。模拟,代码。BLink。模拟,代码。CLink。我们设\(c\)为最后相同的字符。性质:我们一定不会删除字符\(c\)。因此以\(c\)为最后字符的操作次数就是不包含字符\(c\)的极大段的最小操作次数的最大值。对于一个长度为\(l(l\ge1)\)的段,它的最小操作次数为\(\l......
  • P4198 楼房重建 题解
    P4198楼房重建题解线段树二分思路考虑在线段树内维护二信息:区间斜率最大值\(mx\)区间最大斜率上升序列长度\(len\)答案即为根节点的\(len\)。考虑转移信息二:蓝色部分代表左区间的上升序列,红色是右区间的,绿色折线就是当前区间的上升序列。......