洛谷——查单词+简单题+火车线路 +无聊的数列+最大数——线段树

一、 线段树

P2412 查单词 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)icon-default.png?t=N7T8https://www.luogu.com.cn/problem/P2412


解析:
板子题,区间搜索,不需要区间修改

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
// int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
// typedef unsigned long long ULL;
// typedef pair<int, int> PII;
// const double PI = acos(-1.0);
const int N=1e5+10;
struct node
{string s,p;
}tr[4*N];
string k[N],kk[N];
void push_up (int u)
{string a=tr[u<<1].s,b=tr[u<<1|1].s;if (a>b) tr[u]=tr[u<<1];else tr[u]=tr[u<<1|1];
}
node push_up(node l,node r)
{string a=l.s,b=r.s;if (a>b) return l;return r;
}
void build (int u,int l,int r)
{if (l==r){tr[u].p=k[l],tr[u].s=kk[l];return ;}int mid=l+r>>1;build (u<<1,l,mid), build (u<<1|1,mid+1,r);push_up(u);
}
node query(int L,int R,int u,int l,int r)
{if (l>=L&&r<=R) return tr[u];int mid=l+r>>1;node res;if (L<=mid&&mid<R) res=push_up(query(L,R,u<<1,l,mid),query(L,R,u<<1|1,mid+1,r));else if (L<=mid) res=query(L,R,u<<1,l,mid);else if (mid<R) res=query(L,R,u<<1|1,mid+1,r);return res;
}
int n,m;
void solve()
{cin>>n>>m;for (int i=1;i<=n;i++){cin>>k[i];string s;for (int j=0;j<k[i].size();j++){if (k[i][j]>='A'&&k[i][j]<='Z') s +=k[i][j]+32;else s +=k[i][j];}kk[i]=s;}build (1,1,n);for (int i=1;i<=m;i++){int l,r;cin>>l>>r;cout<<query(l,r,1,1,n).p<<endl;}
}
signed main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T = 1;//cin >> T;while (T--) solve();return 0;
}

二、树状数组(也可用线段树)

P5057 [CQOI2006] 简单题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)icon-default.png?t=N7T8https://www.luogu.com.cn/problem/P5057解析:
只需要单点查询和区间修改,是否存在用 &1判断

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
// int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
// typedef unsigned long long ULL;
// typedef pair<int, int> PII;
// const double PI = acos(-1.0);
const int N=1e6+10;
int tr[N];
int n,m;
int lowbit(int x)
{return x&-x;
}
void add(int x,int c)
{for (int i=x;i<=n;i +=lowbit(i)) tr[i] +=c;
}
int query(int x)
{int ans=0;for (int i=x;i>0;i -=lowbit(i)) ans +=tr[i];return ans;
}
void solve()
{cin>>n>>m;int op,l,r,x;for (int i=1;i<=m;i++){cin>>op;if (op==1){cin>>l>>r;add(l,1),add(r+1,-1);}else {cin>>x;cout<<(query(x)&1)<<endl;}}
}
signed main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T = 1;//cin >> T;while (T--) solve();return 0;
}

三、线段树

P8856 [POI2002] 火车线路 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)icon-default.png?t=N7T8https://www.luogu.com.cn/problem/P8856解析:
显然,我们可以把这道题转换成数列区间最小值的问题,然后用线段树。
我们每处理一个预定,如果可以满足,即这一段区间里所有的数都大于等于预定的数,那么我们就把区间里的所有数都减去这个数。否则的话就是不能满足。
需要push_down操作。

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
// int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
// typedef unsigned long long ULL;
// typedef pair<int, int> PII;
// const double PI = acos(-1.0);
const int N=1e6+10;
struct node
{int mi;
}tr[4*N];
int mark[N];
void push_up (int u)
{tr[u].mi=min(tr[u<<1].mi,tr[u<<1|1].mi);
}
void push_down (int u,int l,int r)
{int mid=l+r>>1;tr[u<<1].mi +=mark[u];tr[u<<1|1].mi +=mark[u];mark[u<<1] +=mark[u];mark[u<<1|1] +=mark[u];mark[u]=0;
}
void build (int u,int l,int r,int R)
{if (l==r){tr[u].mi=R;return ;}int mid=l+r>>1;build (u<<1,l,mid,R),build (u<<1|1,mid+1,r,R);push_up(u);
}
int query (int L,int R,int u,int l,int r)
{if (l>=L&&r<=R) return tr[u].mi;push_down(u,l,r);int mid=l+r>>1;int res=0;if (L<=mid&&mid<R) res=min(query(L,R,u<<1,l,mid),query(L,R,u<<1|1,mid+1,r));else if (L<=mid) res=query(L,R,u<<1,l,mid);else if (mid<R) res=query(L,R,u<<1|1,mid+1,r);return res;
}
void modify (int L,int R,int d,int u,int l,int r)
{if (l>=L&&r<=R) {tr[u].mi +=d;mark[u] +=d;return ;}push_down(u,l,r);int mid=l+r>>1;if (L<=mid) modify(L,R,d,u<<1,l,mid);if (mid<R) modify(L,R,d,u<<1|1,mid+1,r);push_up(u);
}
void solve()
{int n,R,c;cin>>n>>R>>c;build (1,1,n,R);while (c--){int o,d,m;cin>>o>>d>>m;int k=query(o,d-1,1,1,n);if (k>=m){cout<<"T\n";modify(o,d-1,-m,1,1,n);}else cout<<"N\n";}
}
signed main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T = 1;//cin >> T;while (T--) solve();return 0;
}

四、线段树+差分

P1438 无聊的数列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)icon-default.png?t=N7T8https://www.luogu.com.cn/problem/P1438解析:
令等差序列的首项为 s,末项为 e,公差为 d。
如果要在差分序列上加一个等差序列,就要在a[l]加上s,a[l+1]~a[r]加上d,a[r+1]减去e。
线段树维护的是差分序列,单点查询 x 就是 1~x 的前缀和。

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
// int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
// typedef unsigned long long ULL;
// typedef pair<int, int> PII;
// const double PI = acos(-1.0);
const int N=2e5+10;
struct node 
{int sum;
}tr[4*N];
int mark[4*N];
int n,m;
int a[N],b[N];
void push_up(int u)
{tr[u].sum=tr[u<<1].sum+tr[u<<1|1].sum;
}
void push_down(int u,int l,int r)
{int mid=l+r>>1;tr[u<<1].sum +=mark[u]*(mid-l+1);tr[u<<1|1].sum +=mark[u]*(r-mid);mark[u<<1] +=mark[u];mark[u<<1|1] +=mark[u];mark[u]=0;
}
void build (int u,int l,int r)
{if (l==r){tr[u].sum=b[l];return ;}int mid=l+r>>1;build(u<<1,l,mid), build(u<<1|1,mid+1,r);push_up(u);
}
void modify(int L,int R,int d,int u,int l,int r)
{if (l>=L&&r<=R) {tr[u].sum +=(r-l+1)*d;mark[u] +=d;return ;}push_down(u,l,r);int mid=l+r>>1;if (L<=mid) modify(L,R,d,u<<1,l,mid);if (mid<R) modify(L,R,d,u<<1|1,mid+1,r);push_up(u);
}
int query(int L,int R,int u,int l,int r)
{if (l>=L&&r<=R) return tr[u].sum;push_down(u,l,r);int mid=l+r>>1;int res=0;if (L<=mid&&mid<R){res=query(L,R,u<<1,l,mid)+query(L,R,u<<1|1,mid+1,r);}else if (L<=mid) res=query(L,R,u<<1,l,mid);else if (mid<R) res=query(L,R,u<<1|1,mid+1,r);return res;
}
void solve()
{cin>>n>>m;for (int i=1;i<=n;i++) cin>>a[i];for (int i=1;i<=n;i++) b[i]=a[i]-a[i-1];build (1,1,n);for (int i=1;i<=m;i++){int op,l,r,k,d,x;cin>>op;if (op==1){cin>>l>>r>>k>>d;modify(l,l,k,1,1,n);if (l<r) modify(l+1,r,d,1,1,n);if (r<n) modify(r+1,r+1,-(k+(r-l)*d),1,1,n);}else {cin>>x;cout<<query(1,x,1,1,n)<<endl;}}
}
signed main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T = 1;// cin >> T;while (T--) solve();return 0;
}

五、线段树

P1198 [JSOI2008] 最大数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)icon-default.png?t=N7T8https://www.luogu.com.cn/problem/P1198解析:

板子题,看代码,也不需要push_down操作。

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
// int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
// typedef unsigned long long ULL;
// typedef pair<int, int> PII;
// const double PI = acos(-1.0);
const int N=2e5+10;
struct node
{int ma;
}tr[4*N];
void push_up(int u)
{tr[u].ma=max(tr[u<<1].ma,tr[u<<1|1].ma);
}
void modify(int x,int d,int u,int l,int r)
{if (l==x&&x==r){tr[u].ma=d;return ;}int mid=l+r>>1;if (x<=mid) modify(x,d,u<<1,l,mid);else modify(x,d,u<<1|1,mid+1,r);push_up(u);
}
int query(int L,int R,int u,int l,int r)
{if (l>=L&&r<=R) return tr[u].ma;int mid=l+r>>1;int res=-1e18;if (L<=mid&&mid<R) res=max(query(L,R,u<<1,l,mid),query(L,R,u<<1|1,mid+1,r));else if (L<=mid) res=query(L,R,u<<1,l,mid);else if (mid<R) res=query(L,R,u<<1|1,mid+1,r);return res;
}
int m,d;
void solve()
{cin>>m>>d;string s;int x;int n=0;int t=0;for (int i=1;i<=m;i++){cin>>s>>x;if (s=="A") {modify(n+1,(x+t)%d,1,1,m),n++;}else {cout<<query(n-x+1,n,1,1,m)<<endl;t=query(n-x+1,n,1,1,m);}}
}
signed main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T = 1;//cin >> T;while (T--) solve();return 0;
}

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

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

相关文章

【PHP + 代码审计】函数详解2.0

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

python内置函数 D

python内置函数 D Python 解释器内置了很多函数和类型&#xff0c;任何时候都能使用。 D 名称描述delattr删除对象的属性。dict创建字典对象。dir列出对象的属性。divmod同时执行除法运算和取模运算&#xff0c;返回一个包含商和余数的元组。 delattr(object, name) delat…

HTML5实现一笔画游戏

HTML5实现一笔画游戏 一笔画问题 一笔画是图论科普中一个著名的问题&#xff0c;它起源于柯尼斯堡七桥问题科普。当时的东普鲁士哥尼斯堡城中有一条河&#xff0c;在这条河上有七座桥&#xff1a; 蓝色的代表河&#xff0c;这条河将城市分开成为四个区域&#xff0c;而七个橙…

深度学习 精选笔记(13.2)深度卷积神经网络-AlexNet模型

学习参考&#xff1a; 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增)&#xff0c;以达到集多方教程的精华于一文的目的。 ③非常推荐上面&#xff08;学习参考&#x…

深入浅出Hive性能优化策略

我们将从基础的HiveQL优化讲起&#xff0c;涵盖数据存储格式选择、数据模型设计、查询执行计划优化等多个方面。会的直接滑到最后看代码和语法。 目录 引言 Hive架构概览 示例1&#xff1a;创建表并加载数据 示例2&#xff1a;优化查询 Hive查询优化 1. 选择适当的文件格…

unity学习(61)——hierarchy和scene的全新认识+模型+皮肤+动画controller

刚刚开始&#xff0c;但又结束的感觉&#xff1f; 1.对hierarchy和scene中的内容有了全新的认识 一定要清楚自己写过几个scene&#xff1b;每个scene之间如何跳转&#xff1b;build setting是add当前的scene。 2.此时的相机需要与模型同级&#xff0c;不能在把模型放在相机下…

odoo中传递上下文

在Odoo中&#xff0c;上下文&#xff08;context&#xff09;是一个非常重要的概念&#xff0c;它允许开发人员在不同的动作、视图或模型间传递信息。上下文通常用于传递特定的标志或变量&#xff0c;这些变量可以影响方法的行为或视图的展示方式。 向表单和动作传递参数 1. …

vue的一些个人理解

个人的一些理解吧 可能不是很全面有的地方可能也不准确 MVVM 的理解 MVVM 是 Model-View-ViewModel 的缩写。MVVM 是一种设计思想。 Model 层代表数据模型&#xff0c;也可以在 Model 中定义数据修改和操作的业务逻辑; View 代表 UI 组件&#xff0c;它负责将数据模型转化成 U…

STM32的USART能否支持9位数据格式话题

1、问题描述 STM32L051 这款单片机。平常的 USART 串口传输是 8 位数据&#xff0c;但是他的项目需要用串口传输 9 位数据。当设置为 8 位数据时&#xff0c;串口响应中断正常。但是&#xff0c;当设置为 9 位数据时&#xff0c;串口就不产生中断了。USART2 的 ISR 寄存器 RXN…

ssh命令——安全远程连接Linux服务器

ssh命令是Secure Shell的简写&#xff0c;其功能是安全地远程连接服务器&#xff0c;ssh是OpenSSH套件中的客户端连接工具&#xff0c;通过SSH加密协议进行远程主机访问&#xff0c;并对远程服务器进行管理。 ssh命令的基本语法格式如下&#xff1a; ssh [选项] 主机名或IP地…

STM32G4高精度定时器的同步功能

1、引言 STM32G474 所含的高精度定时器(HRTIMER)其实包含了多个定时器&#xff0c;多个定时器之间可以单独工作&#xff0c;也可以进行同步&#xff0c;且高精度定时器还能与片上的其他定时器以及其他芯片进行同步&#xff0c;本文将对高精度定时器的同步功能进行介绍。 2、定…

linux安装wxWidgets

概要 在Linux系统中安装erlang时&#xff0c;需要提前安装wxWidgets&#xff01; 官方地址: https://docs.wxwidgets.org gitCode地址&#xff1a;https://gitcode.com/wxWidgets/wxWidgets 下载 下载地址&#xff1a; wget https://github.com/wxWidgets/wxWidgets/releas…

I2S 协议简介

I2S(Inter-IC Sound)是飞利浦公司提出的一种用于数字音频设备之间进行音频数据传输的总线。和 I2C、SPI 这些常见的通信协议一样&#xff0c;I2S 总线用于主控制器和音频 CODEC 芯片之间传输音频数据。 I2S 接口需要 3 根信号线(如果需要实现收和发&#xff0c;那么就要 4 根信…

【Text-to-CAD】基于生成式AI的CAD文件生成工具

Text-to-CAD作为一种机械设计工具,通过简单的文本提示实现CAD文件的智能生成。其开源接口、机器学习支持和Fine Tuning选项为用户提供了高度可定制化的体验。未来的Fine Tuning功能和可能的商业合作有望进一步拓展其在机械设计领域的影响力。 产品概述: 名称: Text-to-CAD类…

Django项目创建和settings设置

2021版本的pycharm有bug,需要将settings.py中 把BASE_DIR后面的/换成, url:统一资源定位符 互联网上每个文件都有一个唯一的url,它包含的信息指出文件的位置以及浏览器应该怎么处理它 语法: protocol://hostname[:port]/path[?query][#fragment] protocol:协议 hostname:主…

【excel】常用的50个函数与基础操作(统计函数)

统计函数 &#xff08;1&#xff09;数组函数操作 1.【SUM】求和 SUM&#xff08;数字1&#xff0c;数字2&#xff0c;数字3…&#xff09; 2.【SUMIF】单条件求和 SUMIF &#xff08;条件区域&#xff0c;条件&#xff0c;求和区域&#xff09; 3.【SUMIFS】(单)多条件求和…

程序员应该如何选择职业赛道?

程序员选择职业赛道是一个涉及个人兴趣、技能匹配、市场需求和长远发展规划的综合决策过程。以下是一些关键步骤和考虑因素&#xff1a; 自我评估&#xff1a; 技能与专长&#xff1a;分析自己在编程语言、算法、数据结构等方面的现有技能&#xff0c;并思考这些技能更适合前端…

适用于系统版本:CentOS 6/7/8的基线安全检测脚本

#!/bin/bash #适用于系统版本&#xff1a;CentOS 6/7/8 echo "----------------检测是否符合密码复杂度要求----------------" #把minlen&#xff08;密码最小长度&#xff09;设置为8-32位&#xff0c;把minclass&#xff08;至少包含小写字母、大写字母、数字、特殊…

51单片机—DS18B20温度传感器

目录 一.元件介绍及原理 二&#xff0c;应用&#xff1a;DS18B20读取温度 一.元件介绍及原理 1.元件 2.内部介绍 本次元件使用的是单总线 以下为单总线的介绍 时序结构 操作流程 本次需要使用的是SKIP ROM 跳过&#xff0c; CONVERT T温度变化&#xff0c;READ SCRATCHPAD…

AI美图设计室试用,可以生成PPT,以及模特试衣

文章目录 美图设计室试用 美图设计室试用 美图设计室是美图秀秀的公司推出的AI图像处理工具&#xff0c;其功能涵盖图片编辑、抠图、海报设计、文生图等常用的AI功能。尽管很多功能需要开通会员使用&#xff0c;但一些免费功能的表现也还不错&#xff0c;值得一用。 美图设计…