Data Structure Problem

试题链接

题目描述

在这里插入图片描述

题意:

有两个序列,
操作1是将a序列的第x位改成y
操作2是将b序列的第x位改成y
操作3是找到一个cx,满足递推式c0=0,ci = max(ci-1+bi,ai)

题解:

在这里插入图片描述
官方题解
说实话我没大看懂。。。
题是我同学做的,他的思路是通过这个递推式可以推导出一个式子
然后用两个线段树来维护,一个用来维护ai-si的差值,一个用来维护b的前缀和
u1s1,码风不错,直接学习

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;//simplify long long
typedef unsigned long long ull;
#define inf 2147483647
#define pi 3.14159265358979
#define rep(i, l, r) for(int i = l; i <= r; i ++)
#define lop(i, r, l) for(int i = r; i >= l; i --)
#define step(i, l, r, __step) for(int i = l; i <= r; i += __step)
#define revp(i, r, l, __step) for(int i = r; i >= l; i -= __step)
#define regsiter reg
#define regsiter int RI
#define regsiter long long RL
inline ll read()//fast read
{ll ret = 0, sgn = 1;char chr = getchar();while(chr < '0' || chr > '9'){if(chr == '-') sgn = -1; chr = getchar();}while(chr >= '0' && chr <= '9'){ret = ret * 10 + chr - '0'; chr = getchar();}return ret * sgn;
}
const int N = 2e5 + 5;
int n, m;
struct seg{int l, r;ll sum, maxw, add;
}tr[N << 2][2];
#define ls p << 1
#define rs p << 1 | 1
ll A[N], B[N], S[N], E[N];
inline void update(int p, int t)
{tr[p][t].sum = tr[ls][t].sum + tr[rs][t].sum;tr[p][t].maxw = max(tr[ls][t].maxw, tr[rs][t].maxw);
}
void build(int p, int l, int r, int t)
{tr[p][t].l = l;tr[p][t].r = r;tr[p][t].add = 0;if(l == r){if(!t){tr[p][t].sum = S[l];tr[p][t].maxw = S[l];}else{tr[p][t].sum = E[l];tr[p][t].maxw = E[l];}return;}int mid = l + r >> 1;build(ls, l, mid, t);build(rs, mid + 1, r, t);update(p, t);
}
void pushdown(int p, int t)
{if(tr[p][t].add){ll v = tr[p][t].add;tr[p][t].add = 0;tr[ls][t].add += v;tr[ls][t].sum += v * (tr[ls][t].r - tr[ls][t].l + 1);tr[ls][t].maxw += v;tr[rs][t].add += v;tr[rs][t].sum += v * (tr[rs][t].r - tr[rs][t].l + 1);tr[rs][t].maxw += v;}
}
void modify_add(int p, int l, int r, ll v, int t)
{if(l <= tr[p][t].l && r >= tr[p][t].r){tr[p][t].add += v;tr[p][t].sum += v * (tr[p][t].r - tr[p][t].l + 1);tr[p][t].maxw += v;return;}pushdown(p, t);int mid = tr[p][t].l + tr[p][t].r >> 1;if(l <= mid) modify_add(ls, l, r, v, t);if(r > mid) modify_add(rs, l, r, v, t);update(p, t);
}
ll ask_sum(int p, int l, int r, int t)
{if(l <= tr[p][t].l && r >= tr[p][t].r){return tr[p][t].sum;}pushdown(p, t);int mid = tr[p][t].l + tr[p][t].r >> 1;ll ret = 0;if(l <= mid) ret += ask_sum(ls, l, r, t);if(r > mid) ret += ask_sum(rs, l, r, t);return ret;
}
ll ask_maxw(int p, int l, int r, int t)
{if(l <= tr[p][t].l && r >= tr[p][t].r){return tr[p][t].maxw;}pushdown(p, t);int mid = tr[p][t].l + tr[p][t].r >> 1;ll ret = -inf;if(l <= mid) ret = max(ret, ask_maxw(ls, l, r, t));if(r > mid) ret = max(ret, ask_maxw(rs, l, r, t));return ret;
}
int main()
{while(~scanf("%d%d", &n, &m)){rep(i, 1, n) A[i] = read();rep(i, 1, n) B[i] = read();rep(i, 1, n) S[i] = S[i - 1] + B[i];rep(i, 1, n) E[i] = A[i] - S[i];int op, a;ll b;build(1, 1, n, 0);build(1, 1, n, 1);while(m --){scanf("%d", &op);if(op == 1){scanf("%d%lld", &a, &b);ll v = b - A[a];A[a] = b;modify_add(1, a, a, v, 1);}else if(op == 2){scanf("%d%lld", &a, &b);ll v = b - B[a];B[a] = b;modify_add(1, a, n, v, 0);modify_add(1, a, n, -v, 1);}else{scanf("%d", &a);ll ans = max(ask_maxw(1, 1, a, 1), 0ll) + ask_sum(1, a, a, 0);printf("%lld\n", ans);}}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

定制Ocelot来满足需求

这篇文章&#xff0c;我们将从Ocelot的中间件源码分析&#xff0c;目前Ocelot已经实现那些功能&#xff0c;还有那些功能在我们实际项目中暂时还未实现&#xff0c;如果我们要使用这些功能&#xff0c;应该如何改造等方面来说明。一、Ocelot源码解读在使用一个组件前&#xff0…

codeforces1151 E. Number of Components(计数)

E. Number of Components 方法一&#xff1a;考虑每个点的贡献&#xff0c;认为一个联通块里让编号最大的点产生贡献 那么&#xff0c;对于一个点 iii&#xff0c;如果对答案产生贡献&#xff0c;一定要点 iii 存在&#xff0c;而点 i1i 1i1 不存在。 #define IO ios::sync_…

P2490-[SDOI2011]黑白棋【博弈论,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P2490 题目大意 一个长度为nnn的棋盘上放下kkk个棋子。 第一个要是白色&#xff0c;下一个要是黑色&#xff0c;在下一个是白色以此类推。 先手操控白&#xff0c;后手操控黑。白色只能往右&#xff0c;黑色只能往左。每次…

【.NET Core项目实战-统一认证平台】第一章 功能及架构分析

从本文开始&#xff0c;我们正式进入项目研发阶段&#xff0c;首先我们分析下统一认证平台应该具备哪些功能性需求和非功能性需求&#xff0c;在梳理完这些需求后&#xff0c;设计好系统采用的架构来满足已有的需求和未来的扩展应用。1 功能性需求统一认证平台应该具备以下基本…

Shift and Reverse

题目链接 题意&#xff1a; 一个序列a1&#xff0c;a2&#xff0c;a3…an 选择一个i&#xff0c;然后将序列改成ai,ai-1,…a1,an,an-1,…ai1 可以进行无数次这样的操作 问&#xff1a;最多有多少不同的序列产生&#xff1f;&#xff08;答案mod1e97&#xff09; 题解&#xf…

UOJ#33-[UR #2]树上GCD【长链剖分,根号分治】

正题 题目链接:https://uoj.ac/problem/33 题目大意 给出nnn个点的一棵树 定义f(x,y)gcd(dis(x,lca),dis(y,lca))f(x,y)gcd(\ dis(x,lca),dis(y,lca)\ )f(x,y)gcd( dis(x,lca),dis(y,lca) )。 对于每个iii求有多少对f(x,y)i(x<y)f(x,y)i(x<y)f(x,y)i(x<y) 1≤n≤1…

codeforces1167 E. Range Deleting(双指针)

E. Range Deleting 首先不难知道如果f(l,r)f(l,r)f(l,r)满足题意&#xff0c;那么f(l,r1),f(l,r2),…,f(l,x)f(l,r1),f(l,r2),\dots,f(l,x)f(l,r1),f(l,r2),…,f(l,x)都满足题意。 因而对于每一个左端点lll&#xff0c;需要找到最小的一个右端点rrr 单调性&#xff1a;对于每…

Redis基本使用及百亿数据量中的使用技巧分享

作者&#xff1a;依乐祝原文地址&#xff1a;https://www.cnblogs.com/yilezhu/p/9941208.html作者&#xff1a;大石头时间&#xff1a;2018-11-10 晚上20&#xff1a;00地点&#xff1a;钉钉群&#xff08;组织代码BKMV7685&#xff09;QQ群&#xff1a;1600800内容&#xff1…

Subsequence Pair

题目 题目描述 题意&#xff1a; X和Y两个字符串&#xff0c;两个字符串各取子序列X1和Y1&#xff0c;问X1<Y1的情况下X1和Y1的长度和最长是多少&#xff1f; 比如例子&#xff1a; zazxwabzczazazd abcaa 第一个字符串选取子序列为azxwabzczazazd 第二个为bcaa azxwabzc…

NOI.AC#2144-子串【SAM,倍增】

正题 题目链接:http://noi.ac/problem/2144 题目大意 给出一个字符串sss和一个序列aaa。将字符串sss的所有本质不同子串降序排序后&#xff0c;求有多少个区间[l,r][l,r][l,r]使得子串sl,rs_{l,r}sl,r​排名等于al∼ra_{l\sim r}al∼r​的和。 1≤n≤21051\leq n\leq 2\times…

codeforces1481 E. Sorting Books(贪心+dp)

大佬题解1 大佬题解2 E. Sorting Books 首先每本书都移动&#xff0c;移动次数是n能够满足题意。如果某些书不用移动&#xff0c;说明把隔开他们中间的书全部抽走后自然成组。 对于每本书全部移动的情况&#xff0c;显然我们可以选择一种颜色的书全部不案&#xff0c;移动别…

【.NET Core项目实战-统一认证平台】第三章 网关篇-数据库存储配置(1)

本篇将介绍如何扩展Ocelot中间件实现自定义网关&#xff0c;并使用2种不同数据库来演示Ocelot配置信息存储和动态更新功能&#xff0c;内容也是从实际设计出发来编写我们自己的中间件&#xff0c;本文内容涵盖设计思想内容和代码内容&#xff0c;我希望园友们最好跟着我这个文章…

Manacher 例题讲解

文章目录HDU 4513 吉哥系列故事——完美队形II题意&#xff1a;题解&#xff1a;代码&#xff1a;HDU 3613 Best Reward题意&#xff1a;题解&#xff1a;代码&#xff1a;HDU 3068 最长回文题意&#xff1a;题解&#xff1a;代码&#xff1a;HDU 5371 Hotarus problem题意&…

NOI.AC#2139-选择【斜率优化dp,树状数组】

正题 题目链接:http://noi.ac/problem/2139 题目大意 给出nnn个数字的序列aia_iai​。然后选出一个不降子序列最大化子序列的aia_iai​和减去没有任何一个数被选中的区间数量。 1≤n≤106,1≤ai≤1081\leq n\leq 10^6,1\leq a_i\leq 10^81≤n≤106,1≤ai​≤108 解题思路 嗯…

codeforces1485 E. Move and Swap(dp)

E. Move and Swap Heltion 由于红色硬币向下一层走的时候只能走儿子&#xff0c;而蓝色无限制&#xff08;对后续操作无影响&#xff09;&#xff0c;于是考虑下面表示 状态表示&#xff1a;fuf_ufu​表示当前是红色硬币&#xff0c;向下一层走后的最大价值。 状态转移&#…

一个技术管理者的苦逼【技术管理漫谈】

希望给你3-5分钟的碎片化学习&#xff0c;可能是坐地铁、等公交&#xff0c;积少成多&#xff0c;水滴石穿&#xff0c;谢谢关注。角色转变 从工程师转技术管理这两年&#xff0c;好比头马变成车夫&#xff0c;除了角色认知的转变&#xff0c;还要看方向&#xff0c;定计划。不…

KMP Trie 例题讲解

文章目录HDU 4763 Theme Section题意&#xff1a;题解&#xff1a;代码&#xff1a;POJ 3630 Phone List题意&#xff1a;题解&#xff1a;代码&#xff1a;HDU 3746 Cyclic Nacklace题意&#xff1a;题解&#xff1a;代码&#xff1a;HDU 2087 剪花布条题意&#xff1a;题解&a…

P4640-[BJWC2008]王之财宝【OGF,Lucas定理】

正题 题目链接:https://www.luogu.com.cn/problem/P4640 题目大意 nnn种物品&#xff0c;其中ttt种物品是有个数限制的&#xff0c;第iii种限制为bib_ibi​&#xff0c;求选出mmm个物品的方案数%p\% p%p的值 1≤n,m,bi≤109,0≤t≤15,p∈[1,105]∩Pri1\leq n,m,b_i\leq 10^9,0…

[机器翻译]参与 Microsoft 开放源代码软件项目的方式

下面是一个事实&#xff1a;Microsoft 托管在 GitHub&#xff0c;包括.NET 编译器平台&#xff0c;也称为"Roslyn"具有多达 4 万行代码等一些相当大的大约 2,000 开放源代码软件 (OSS) 存储库。很多开发人员的代码将更改提交到数以百万计的计算机运行的项目可能会令人…

codeforces1485 F. Copy or Prefix Sum(dp)

F. Copy or Prefix Sum Venice technique简要就是懒标记思想。 由于前缀和数组和原数组一一对应&#xff0c;这里我们选择求aia_iai​的前缀和数组的方案数&#xff08;下面aia_iai​表示原题数组的前缀和&#xff09; 不难得知原题目的两个条件即 biai−ai−1→aibiai−1b_ia…