【*2200线段树Pushup】CF1567 E

这篇具有很好参考价值的文章主要介绍了【*2200线段树Pushup】CF1567 E。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Problem - E - Codeforces

题意:

【*2200线段树Pushup】CF1567 E,线段树与树状数组,算法,c++,数据结构

思路:

维护这些信息即可

【*2200线段树Pushup】CF1567 E,线段树与树状数组,算法,c++,数据结构 

 Code:文章来源地址https://www.toymoban.com/news/detail-563750.html

#include <bits/stdc++.h>

#define int long long

using namespace std;

const int mxn=2e5+10;
const int mxe=2e5+10;
const int mod=1e9+7;
const int Inf=1e18;

struct info{
	int mx,lmx,rmx,sz,cnt=0;
	int lval,rval;
};

info operator+(const info &l,const info &r){
	info res;

	res.cnt=l.cnt+r.cnt;
	if(l.rval<=r.lval) res.cnt+=l.rmx*r.lmx;

	res.sz=l.sz+r.sz;
	res.lval=l.lval;
	res.rval=r.rval;

	if(l.mx==l.sz){
		if(l.rval<=r.lval) res.lmx=l.sz+r.lmx;
		else res.lmx=l.sz;
	}else{
		res.lmx=l.lmx;
	}

	if(r.mx==r.sz){
		if(l.rval<=r.lval) res.rmx=r.sz+l.rmx;
		else res.rmx=r.sz;
	}else{
		res.rmx=r.rmx;
	}

	res.mx=max(l.mx,r.mx);

	if(l.rval<=r.lval) res.mx=max(res.mx,l.rmx+r.lmx);

	return res;
}

struct Segtree{
	info Val;
}tree[mxe<<2];

int N,Q,op,x,y,l,r;
int a[mxn];

void pushup(int rt){
	tree[rt].Val=tree[rt<<1].Val+tree[rt<<1|1].Val;
}
void build(int rt,int l,int r){
	if(l==r){
		tree[rt].Val.cnt=1;
		tree[rt].Val.lmx=tree[rt].Val.rmx=tree[rt].Val.mx=tree[rt].Val.sz=1;
		tree[rt].Val.lval=tree[rt].Val.rval=a[l];
		return;
	}
	int mid=l+r>>1;
	build(rt<<1,l,mid);
	build(rt<<1|1,mid+1,r);
	pushup(rt);
}
void change(int rt,int l,int r,int x,int k){
	if(l==r){
		tree[rt].Val.cnt=1;
		tree[rt].Val.lmx=tree[rt].Val.rmx=tree[rt].Val.mx=tree[rt].Val.sz=1;
		tree[rt].Val.lval=tree[rt].Val.rval=k;
		return;
	}
	int mid=l+r>>1;
	if(x<=mid) change(rt<<1,l,mid,x,k);
	else change(rt<<1|1,mid+1,r,x,k);
	pushup(rt);
}
info query(int rt,int l,int r,int x,int y){
	if(x<=l&&r<=y){
		return tree[rt].Val;
	}
	int mid=l+r>>1;
	if(x>mid) return query(rt<<1|1,mid+1,r,x,y);
	else if(y<=mid) return query(rt<<1,l,mid,x,y);
	else{
		return query(rt<<1,l,mid,x,y)+query(rt<<1|1,mid+1,r,x,y);
	}
}
void solve(){
	cin>>N>>Q;
	for(int i=1;i<=N;i++) cin>>a[i];
	build(1,1,N);
	while(Q--){
		cin>>op;
		if(op==1){
			cin>>x>>y;
			change(1,1,N,x,y);
		}else{
			cin>>l>>r;
			cout<<query(1,1,N,l,r).cnt<<'\n';
		}
	}
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int __=1;//cin>>__;
    while(__--)solve();return 0;
}

到了这里,关于【*2200线段树Pushup】CF1567 E的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【高级数据结构】树状数组

    目录 树状数组1 (单点修改,区间查询) 树状数组2(区间修改,单点查询) 树状数组1 (单点修改,区间查询) 题目链接:洛谷 树状数组1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某一个数加上 x 求出某区间每一个数的和 输入格式 第一行包含两个正

    2024年02月15日
    浏览(47)
  • 数据结构<1>——树状数组

    前言:树状数组能解决的问题线段树一定可以解决。然后关于线段树的内容会在2中讲解。 树状数组,也叫Fenwick Tree和BIT(Binary Indexed Tree),是一种支持 单点修改 和 区间查询 的,代码量小的数据结构。 那神马是单点修改和区间查询?我们来看一道题。 洛谷P3374(模板): 在本题中

    2024年01月25日
    浏览(61)
  • 《算法竞赛进阶指南》0x42 树状数组

    题意: 二维平面给定一些点,询问 v 形和 ∧ 形数目 解析: 对于 ∧ 形: ( i , y ) (i,y) ( i , y ) ,考虑左右两侧比该点低的点的个数。树状数组查询 y j y y_j y y j ​ y 的点的个数。因为总共有 y − 1 y-1 y − 1 个点比当前点低,有 n − y n-y n − y 个点比当前点高。 v型同理。 代码

    2023年04月11日
    浏览(40)
  • 数据结构与算法——树与二叉树

    😊各位小伙伴久等了,本专栏新文章出炉了!!! 我又回来啦,接下来的时间里,我会持续把数据结构与算法专栏更新完。 👉树型结构👈 是一类重要的 ✍非线性数据结构 ,其中以树和二叉树最为常用,直观来看,树是以分支关系定义的层次结构。树型结构在客观世界中

    2024年02月11日
    浏览(45)
  • 【数据结构与算法】树与二叉树

    除了之前我们讲的栈、队列、链表等线性结构,数据结构中还有着一对多的 非线性结构 ——— 树 。 树是有 n 个结点组成的有限集,当n=0时为空树,在任意一颗非空树中,有且仅有一个 特定的根结点 ;当n1时,其余结点又可以分为一棵树,称为根的 子树 。 如下图所示: A为

    2023年04月09日
    浏览(49)
  • 【枚举区间+线段树】CF Ehu 152 E

    Problem - E - Codeforces 题意: 思路: 感觉是个套路题 对区间计数,按照CF惯用套路,枚举其中一个端点,对另一个端点计数 对于这道题,枚举右端点,对左端点计数 Code:  

    2024年02月10日
    浏览(35)
  • 数据结构与算法——树与二叉树篇详解

    树形结构是一种非常重要的 非线性结构 ,树形结构中数据元素之间具有 一对多 的逻辑关系。 1.1.1 树的定义 树是由n(n=0)个结点所构成的有限集合 当n=0时,称为空树 当n0时,n个结点满足以下条件 有且仅有一个称为根的结点 其余结点可分为m个互不相交的有限集合,且每一个

    2024年02月06日
    浏览(50)
  • 数据结构与算法--二叉树与树(单选题含题解)

    1、对以下算法功能最准确的描述是()。 A.判断二叉树根结点值是否为e B.判断二叉树是否存在值为e结点 C.求二叉树中值为e结点的层次 D.求二叉树值为e的结点的个数 C 2、二叉树的形态 由 3 个结点可以构造出 ▁▁▁▁▁ 种不同形态的二叉树。 A.2 B.3 C.4 D.5 D 由n个结点可以构

    2024年02月03日
    浏览(40)
  • 学习高级数据结构:探索平衡树与图的高级算法

    🎉欢迎来到数据结构学习专栏~学习高级数据结构:探索平衡树与图的高级算法 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:数据结构学习 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技

    2024年02月09日
    浏览(45)
  • 贪心找性质+dp表示+矩阵表示+线段树维护:CF573D

    比较套路的题目 首先肯定贪心一波,两个都排序后尽量相连。我一开始猜最多跨1,但其实最多跨2,考虑3个人的情况: 我们发现第3个人没了,所以可以出现跨2的情况 然后直接上dp,由 i − 1 , i − 2 , i − 3 i-1,i-2,i-3 i − 1 , i − 2 , i − 3 转移过来。 然后这显然可以拿矩阵表

    2024年02月07日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包