首页 > 编程语言 >2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛 L 捡贝壳

2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛 L 捡贝壳

时间:2023-03-17 11:35:08浏览次数:51  
标签:std lmx int rmx 上海理工大学 2023 GPLT include define

题目链接

还没补

一道类似的题
线段树上维护四个信息,从左端点向右连续的最大值lmx,从右端点向左连续的做大值rmx,区间最大值mx,区间和sum,每次pushup的时候如何维护四个信息?
对于lmx更新的时候需要用左儿子的lmx和左儿子的和加上右儿子的lmx取max
对于rmx更新的时候需要用右儿子的rmx和右儿子的和加上左儿子的rmx取max
对于sum直接左右儿子加起来即可
对于区间最值,在左儿子的mx右儿子的mx左儿子的rmx加上右儿子的lmx取max

#include <iostream>
#include <cstring>
#include <iomanip>
#include <algorithm>
#include <stack>
#include <queue>
#include <numeric>
#include <cassert>
#include <bitset>
#include <cstdio>
#include <vector>
#include <unordered_set>
#include <cmath>
#include <map>
#include <unordered_map>
#include <set>
#include <deque>
#include <tuple>
#include <array>
 
#define all(a) a.begin(), a.end()
#define cnt0(x) __builtin_ctz(x)
#define endl '\n'
#define ll long long
#define ull unsigned long long
#define cntone(x) __builtin_popcount(x)
#define db double
#define fs first
#define se second
#define AC main(void)
#define HYS std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);
typedef std::pair<int, int > PII;
typedef std::pair<int, std::pair<int, int>> PIII;
typedef std::pair<ll, ll> Pll;
typedef std::pair<double, double> PDD;
using ld = double long;

const long double eps = 1e-9;
const int INF = 0x3f3f3f3f;
const int N = 5e5 + 10, M = 4e5 + 10;
int n , m, p;

int d1[] = {0, 0, 1, -1};
int d2[] = {1, -1, 0, 0};

int a[N];

struct node{
	int l, r;
	ll lmx, rmx, sum, mx;
}tr[N << 2];

inline void pushup(node &u,node &l,node &r){
    u.sum = l.sum + r.sum;
    u.lmx = std::max(l.lmx, l.sum + r.lmx);
    u.rmx = std::max(r.rmx, r.sum + l.rmx);
    u.mx = std::max({l.mx, r.mx, l.rmx + r.lmx});
}

inline void pushup(int u){
	pushup(tr[u], tr[u << 1], tr[u << 1 | 1]);
}

inline void build_tree(int u, int l, int r){
	tr[u] = {l, r};
	if(l == r){
		tr[u].lmx = tr[u].rmx = tr[u].mx = tr[u].sum = a[l];
		return ;
	}
	
	int mid = l + r >> 1;
	build_tree(u << 1, l, mid);
	build_tree(u << 1 | 1, mid + 1, r);
	pushup(u);
}

inline void modify(int u, int x, int v){
	if(tr[u].l == tr[u].r){
		tr[u].sum = tr[u].lmx = tr[u].rmx = tr[u].mx = v;
		return ;
	}
	
	int mid = tr[u].l + tr[u].r >> 1;
	if(x <= mid)	modify(u << 1, x, v);
	else modify(u << 1 | 1, x, v);
	pushup(u);
}

inline node query(int u, int l, int r){
	if(tr[u].l >= l && tr[u].r <= r)	return tr[u];
	int mid = tr[u].l + tr[u].r >> 1;
	if(r <= mid)	return query(u << 1, l, r);
	if(l > mid)	return query(u << 1 | 1, l ,r);
	node res;
	node ls = query(u << 1, l, r);
	node rs = query(u << 1 | 1, l, r);
	pushup(res, ls, rs);	

	return res;
}

inline void solve(){
	std::cin >> n >> m;
	for(int i = 1; i <= n; i ++)	std::cin >> a[i];
	build_tree(1, 1, n);
	while(m --){
		int op, l, r;
		std::cin >> op >> l >> r;
		if(op == 1){
			if(l > r)	std::swap(l, r);
			std::cout << query(1, l, r).mx << '\n';
		}	
		else modify(1, l, r);
	}
}

signed AC{
   	HYS
   	
	int _ = 1;
	//std::cin >> _;
	while(_ --)
        solve();

    return 0;
}

标签:std,lmx,int,rmx,上海理工大学,2023,GPLT,include,define
From: https://www.cnblogs.com/qdhys/p/17225455.html

相关文章

  • day16(2023.3.16)
    1.包装类 2.自动装箱(autoboxing)和拆箱(unboxing) 3.自定义包装类 运行结果: 4.StringBuilder类和StringBuffer类 5.效率测试 运行结果: 6.时间类......
  • 会声会影2023安装、激活教程
    安装前准备:1、会声会影2023的安装需要在有网络接的状态下进行。请您确保安装过程中有一个良好的网络环境,并且在安装过程中,不能断网。2、安装之前退出、关闭电脑管家以及杀毒......
  • 会声会影Video Studio 2023旗舰版怎么安装、激活教程
    会声会影(VideoStudio)2023旗舰版是加拿大Corel公司制作的一款功能强大的视频编辑软件、大型视频制作软件、专业视频剪辑软件。会声会影专业视频编辑处理软件,可以用于剪辑&......
  • 2023/3/16
    今天在Androidstudio上怕下载了MySQL的jar包,并且成功配置了环境。而且将xml配置文件都配置好了。  还有连接数据库MySQLjdbc写好了 ......
  • 2023年3月16号
    马上要交打卡系统了,自己完成的要求点不多,距离星期五还有一天,感觉只有后面才能补全,现在只能说是能完成多少算多少吧,地铁系统也是一个大问题还需要解决,下次验收地铁系统第一......
  • 2023.3.16每日总结
    packagecom.example.myapplication;importandroidx.appcompat.app.AppCompatActivity;importandroid.annotation.SuppressLint;importandroid.content.Intent;i......
  • 2023年3月16日(软件工程日报)
    今天完成第一次个人作业第二阶段,完成相关的查询部分同时完善第一阶段部分内容,书写完使用说明书    ......
  • 2023.3.16结对总结
    今天进行了地铁Javaweb的数据库链接查询类的完成为了完成查询的操作,复习了list集合 ......
  • 江南信息学2023第四周练习20230317 题解
    首先,通报批评上周抄袭题解的同学有:黄耿益,黄远鸿,博客提供题解不是让大家直接复制粘贴抄袭的,而是在大家不会做时提供思路和解决方案,可以抄写,但不允许直接复制粘贴抄袭,请养成......
  • 2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛 H 摘苹果
    题目链接算是比较入门的线段树题了考虑线段树上维护三个值,sum维护总和,used维护当前结点是否还能进行操作,cnt100维护当前结点里面树上苹果数量少于100的树的数量。我们可......