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

一、 线段树

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;点赞➕评论➕收…

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;不能在把模型放在相机下…

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

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

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

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

I2S 协议简介

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

Django项目创建和settings设置

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

适用于系统版本: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;值得一用。 美图设计…

Spring Boot(六十九):利用Alibaba Druid对数据库密码进行加密

1 Alibaba Druid简介 之前介绍过Alibaba Druid的,章节如下,这里就不介绍了: Spring Boot(六十六):集成Alibaba Druid 连接池 这章使用Alibaba Druid进行数据库密码加密,在上面的代码上进行修改,这章只介绍密码加密的步骤。 目前越来越严的安全等级要求,我们在做产品…

JS原型和原型链的理解

原型链图&#xff0c;图中Parent是构造函数&#xff0c;p1是通过Parent实例化出来的一个对象 前置知识 js中对象和函数的关系&#xff0c;函数其实是对象的一种 函数、构造函数的区别&#xff0c;任何函数都可以作为构造函数&#xff0c;但是并不能将任意函数叫做构造函数&…

python之前端css样式(一)

css ID选择器 #c1{color:red;#边框为红色border:1px solid red; } <div id"c2">中国移动</div> 类选择器 .xx{color:blue; } <div class"xx">中国联通</div> 标签选择器 li{color: pink; } <ul><li>北京</li…

CSS动画属性(一)加两实例

keyframes 定义 使用可以创建动画&#xff08;逐步改变从一个CSS样式设定到另一个。)可以设置多次变化发生时使用%/关键字from和to 0&#xff05;是开头动画&#xff0c;100&#xff05;是当动画完成。 为了获得最佳的浏览器支持&#xff0c;始终定义为0&#xff05;和100&…

数据分析 | NumPy

NumPy&#xff0c;全称是 Numerical Python&#xff0c;它是目前 Python 数值计算中最重要的基础模块。NumPy 是针对多维数组的一个科学计算模块&#xff0c;这个模块封装了很多数组类型的常用操作。 使用numpy来创建数组 import numpy as npdata np.array([1, 2, 3]) print…

网络学习:邻居发现协议NDP

目录 前言&#xff1a; 一、报文内容 二、地址解析----NS/NA 目标的被请求组播IP地址 邻居不可达性检测&#xff1a; 重复地址检测 路由器发现 地址自动配置 默认路由器优先级和路由信息发现 重定向 前言&#xff1a; 邻居发现协议NDP&#xff08;Neighbor Discovery…

【晴问算法】入门篇—贪心算法—区间不相交问题

题目描述 给定n个开区间&#xff0c;从中选择尽可能多的开区间&#xff0c;使得这些开区间两两没有交集。 输入描述 输出描述 输出一个整数&#xff0c;表示最多选择的开区间个数。 样例1输入 4 1 3 2 4 3 5 6 7 输出 3 解释 最多选择(1,3)、(3,5)、(6,7)三个区间&#xff0c;它…

SAP前台处理:销售业务集成<VA03/VL03N/VLPOD/VF03) 01/02

一、背景&#xff1a; 从销售订单创建VA01>发货过账VL01N >POD确认>VF01开票 这个流程涉及的凭证流及各个节点如何查询上游下游凭证&#xff1b; 二、凭证流&#xff1a; 从销售订单查看销售凭证流 VA03 双击交货单&#xff1a;带出交货单对应行项目及分批次项目…