2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛(同步赛)(H题)(线段树)


 

又到了万物复苏的季节,家乡的苹果树结果了。像往常一样小龙同学被叫回家摘苹果。

假设需要采摘的一棵树上当前有a颗苹果,那么小龙会采摘⌈a/3⌉颗苹果,其中⌈x⌉表示不小于x的最小整数。

但是,为了可持续发展,若a小于10,那么小龙不会采摘这棵树的任何一颗苹果。

此外,小龙时不时会有一些疑问,想知道一些树上当前总共有多少颗苹果。

又或者想知道一些树中有多少棵苹果树上的苹果小于100颗。

那么就请你来帮助小龙同学吧。

输入描述:

第1行2个正整数 n和 m。表示小龙同学家有n棵苹果树,m次采摘(或疑问)。

第2行 n 个整数,第 i 个整数 ai​ 表示第 i棵苹果树上原本结有 ai​ 颗苹果 。

接下来 m 行,每行共3个正整数op,l,r。

若op=1,表示小龙会采摘 [l,r] 区间内的苹果树。

若op=2,表示小龙想知道 [l,r]区间内的有多少棵苹果树上的苹果小于100颗。

若op=3,表示小龙想知道 [l,r] 区间内的共有多少颗苹果。

输出描述:

对于每个 op=2或者op=3的操作,输出1行1个整数表示答案。

示例1

输入

5 5
1 10 100 1000 10000
2 1 5
3 1 5
1 1 5
2 1 5
3 1 5

输出

2
11111
3
7405

备注:

1e5范围

 

#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
typedef long long ll;
typedef pair<int,int> pii;
int n,m;
int a[N];
struct node{
    int l,r;
    int max,num100;
    ll sum;
}tr[N*4];
void pushup(int u){
    tr[u].max= max(tr[u<<1].max,tr[u<<1|1].max);
    tr[u].num100=tr[u<<1].num100+tr[u<<1|1].num100;
    tr[u].sum=tr[u<<1].sum+tr[u<<1|1].sum;
}
void build(int u,int l,int r){
    tr[u]={l,r,0,0,0};
    if(l==r){
        tr[u].max=a[r];
        tr[u].sum=a[r];
        if(a[r]<100) tr[u].num100=1;
        return;
    }
    int mid=(l+r)>>1;
    build(u<<1,l,mid);
    build(u<<1|1,mid+1,r);
    pushup(u);
}
void modify(int u,int l,int r){
    if(tr[u].max<10) return;
    if(tr[u].l==tr[u].r){
        int p=tr[u].sum/3;
        if(tr[u].sum%3) p++;
        tr[u].sum-=p;
        tr[u].max=(int)tr[u].sum;
        if(tr[u].sum<100)tr[u].num100=1;
        return;
    }
    int mid=tr[u].r+tr[u].l>>1;
    if(l<=mid) modify(u<<1,l,r);
    if (r>mid) modify(u<<1|1,l,r);
    pushup(u);
}
ll querynum100(int u,int l,int r){
    if(l<=tr[u].l&&r>=tr[u].r) return tr[u].num100;
    ll res=0;
    int mid = tr[u].l + tr[u].r >> 1;
    if (l <= mid) res += querynum100(u << 1, l, r);
    if (r > mid) res += querynum100(u << 1 | 1, l, r);
    return res;
}
ll querysum(int u,int l,int r){
    if(l<=tr[u].l&&r>=tr[u].r) return tr[u].sum;
    ll res=0;
    int mid = tr[u].l + tr[u].r >> 1;
    if (l <= mid) res += querysum(u << 1, l, r);
    if (r > mid) res += querysum(u << 1 | 1, l, r);
    return res;
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    build(1,1,n);
    while(m--){
        int op,l,r;
        scanf("%d%d%d",&op,&l,&r);
        if(op==1) modify(1,l,r);
        if(op==2) printf("%lld\n",querynum100(1,l,r));
        if(op==3) printf("%lld\n",querysum(1,l,r));
    }
    return 0;
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

国产航顺HK32F030M:定时器计数/PWM输出/输出翻转/输入捕获

定时器计数 /********************************************************************************* file : main.c* brief : Main program body******************************************************************************* attention**//* Include…

为什么VMware会给我多创建了两个网络呢?Windows和Linux为什么可以彼此ping的通呢

为什么VMware会给我多创建了两个网络呢&#xff1f;Windows和Linux为什么可以彼此ping的通呢 文章目录为什么VMware会给我多创建了两个网络呢&#xff1f;Windows和Linux为什么可以彼此ping的通呢桥接模式ANT模式&#xff08;VMnet8&#xff09;仅主机模式&#xff08;VMnet1&a…

【文心一言】什么是文心一言,如何获得内测和使用方法。

文心一言什么是文心一言怎么获得内测资格接下来就给大家展示一下文学创作商业文案创作数理逻辑推算中文理解多模态生成用python写一个九九乘法表写古诗前言&#xff1a; &#x1f3e0;个人主页&#xff1a;以山河作礼。 &#x1f4dd;​&#x1f4dd;:本文章是帮助大家了解文心…

基于python的奥运会历史数据分析【120年】

人生苦短 我用Python Python其他实用资料:点击此处跳转文末名片获取 一、数据概览 1.背景描述 该数据集整理了从1896年雅典奥运会至2016年里约热内卢奥运会120年的奥林匹克运动会的历史数据。 需要注意的是&#xff0c;在1896年-1992年期间&#xff0c;冬季奥运会与夏季奥运…

数据分析之Matplotilb数据可视化

文章目录1.Matplotilb 基础plt.show()函数plt.plot()函数基本用法例子坐标轴显示的范围传入Numpy数组传入多组数据线条属性使用plt.plot()的返回值来设置线条属性plt.setp()修改线条性质子图plt. subplot (numrows, numcols,fignum)形式3.电影数据绘图(1)绘制每个国家或地区的电…

python并发编程多线程

在传统操作系统中&#xff0c;每个进程有一个地址空间&#xff0c;而且默认就有一个控制线程 线程顾名思义&#xff0c;就是一条流水线工作的过程&#xff0c;一条流水线必须属于一个车间&#xff0c;一个车间的工作过程是一个进程 车间负责把资源整合到一起&#xff0c;是一个…

QT VTK开发 (一、下载编译)

Vtk&#xff0c;&#xff08;visualization toolkit&#xff09;是一个开源的免费软件系统&#xff0c;主要用于三维计算机图形学、图像处理和可视化。Vtk是在面向对象原理的基础上设计和实现的&#xff0c;它的内核是用C构建的&#xff0c;包含有大约250,000行代码&#xff0c…

wait 和 notify

✨个人主页&#xff1a;bit me&#x1f447; ✨当前专栏&#xff1a;Java EE初阶&#x1f447; ✨每日一语&#xff1a;阅己&#xff0c;越己&#xff0c;悦己&#xff1b;自行&#xff0c;自省&#xff0c;自醒&#xff1b;无味&#xff0c;无谓&#xff0c;无畏。 目 录⏰一.…

QT Plugin 插件开发

插件是一种&#xff08;遵循一定规范的应用程序接口编写出来的&#xff09;程序&#xff0c;定位于开发实现应用软件平台不具备的功能的程序。 插件必须依赖于应用程序才能发挥自身功能&#xff0c;仅靠插件是无法正常运行的&#xff1b;相反地&#xff0c;应用程序并不…

漫画:什么是归并排序算法?

归并排序是建立在归并操作的一种高效的排序方法&#xff0c;该方法采用了分治的思想&#xff0c;比较适用于处理较大规模的数据&#xff0c;但比较耗内存&#xff0c;今天我们聊聊归并排序 一、排序思想 一天&#xff0c;小一尘和慧能坐在石头上&#xff0c;眺望着远方 分而治…

Adam优化器算法详解及代码实现

文章目录学习率调整与梯度估计修正RMSprop 算法动量法Adam学习率调整与梯度估计修正 在介绍Adam算法之前&#xff0c;先谈谈Adam中两个关键的算法&#xff1a;学习率调整&#xff08;RMSprop 算法&#xff09;与梯度估计修正。 RMSprop 算法 学习率是神经网络优化时的重要超…

ubuntu不同版本的源(换源)(镜像源)(lsb_release -c命令,显示当前系统的发行版代号(Codename))

文章目录查看unbuntu版本名&#xff08;lsb_release -c命令&#xff09;各个版本源代号&#xff08;仅供参考&#xff0c;具体代号用上面命令查&#xff09;各版本软件源Ubuntu20.10阿里源&#xff1a;清华源&#xff1a;Ubuntu20.04阿里源&#xff1a;清华源&#xff1a;Ubunt…

Java的jar包打包成exe应用

将springboot项目使用maven打出的jar包&#xff0c;打成windows平台下exe应用程序包&#xff08;自带jre环境&#xff09;。 工具&#xff1a;1、exe4j 2、Inno Setup 工具放到网盘&#xff0c;链接&#xff1a;https://pan.baidu.com/s/1ZHX8P7u-7GBxaC6uaIC8Ag 提取码&#x…

有图解有案例,我终于把 Condition 的原理讲透彻了

哈喽大家好&#xff0c;我是阿Q&#xff01; 20张图图解ReentrantLock加锁解锁原理文章一发&#xff0c;便引发了大家激烈的讨论&#xff0c;更有小伙伴前来弹窗&#xff1a;平时加解锁都是直接使用Synchronized关键字来实现的&#xff0c;简单好用&#xff0c;为啥还要引用Re…

几个cve漏洞库查询网站-什么是CVE?常见漏洞和暴露列表概述

CVE 的英文全称是“Common Vulnerabilities & Exposures”通用漏洞披露。CVE就好像是一个字典表&#xff0c;为广泛认同的信息安全漏洞或者已经暴露出来的弱点给出一个公共的名称。使用一个共同的名字&#xff0c;可以帮助用户在各自独立的各种漏洞数据库中和漏洞评估工具中…

初识C++需要了解的一些东西(2)

&#x1f601;关注博主&#xff1a;翻斗花园第一代码手牛爷爷 &#x1f603;Gitee仓库&#xff1a;牛爷爷爱写代码 目录&#x1f30d;内联函数&#x1f315;内联函数概念&#x1f316;内联函数特性&#x1f313;auto关键字(C11)&#x1f31e;类型别名⭐️auto简介☀️auto的使…

从GPT到GPT-3:自然语言处理领域的prompt方法

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

开源超级终端工具——WindTerm

1、下载和安装&#xff08;我的是win10&#xff0c;其他版本各位自选&#xff09; Releases kingToolbox/WindTerm GitHub 安装的话&#xff0c;相信大家不用我赘述了。 初始界面是这样的&#xff1a; 2、WindTerm使用 2.1 本地会话&#xff08;最下面那个框&#xff0c;发…

Qt·Linux下Qt、Qml程序的打包

背景&#xff1a;最近开发一个传输应用&#xff0c;上位机是在Ubuntu上用 Qt开发的&#xff0c;但是实际运行是在麒麟系统上&#xff0c;所有需要对Ubuntu上的Qt程序进行打包当前系统环境&#xff1a;Ubuntu 20 Qt 5.14 -------->>> 麒麟v10 尝试的方法&#xff1a;一…

Linux(传输层二继续讲TCP)

文章目录0. 前言1. 流量控制2. 滑动窗口2-1 基础2-2 重传3. 拥塞控制4. 延迟应答5. 捎带应答6. 面向字节流7. 粘包问题8. TCP异常情况9. TCP小结10. 基于TCP应用层协议11. TCP/UDP对比0. 前言 上一章我们主讲了TCP,本章我们继续 链接&#xff1a;https://blog.csdn.net/Dingyu…
最新文章