博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【TYVJ】P1039 忠诚2
阅读量:6096 次
发布时间:2019-06-20

本文共 1365 字,大约阅读时间需要 4 分钟。

【算法】线段树

【注意】修改或查询区间时,若区间能包含某棵子树就立即返回,否则线段树就失去了意义。

#include
#include
using namespace std;const int inf=0x3f3f3f3f;struct treess{
int l,r,ms;}t[300010];int a[100010],n,m,tot,anss[100010];void build(int k,int l,int r){ t[k].l=l;t[k].r=r; if(l==r){t[k].ms=a[l];return;} int mid=(l+r)>>1; build(k<<1,l,mid); build(k<<1|1,mid+1,r); t[k].ms=min(t[k<<1].ms,t[k<<1|1].ms);// printf("[%d] l=%d r=%d mins=%d\n",k,t[k].l,t[k].r,t[k].ms);}void insert(int k,int x,int y){ int left=t[k].l,right=t[k].r; if(left==right)t[k].ms=y; else { int mid=(left+right)>>1; if(x<=mid)insert(k<<1,x,y); else insert(k<<1|1,x,y); t[k].ms=min(t[k<<1].ms,t[k<<1|1].ms); }}int ask(int k,int l,int r){ int left=t[k].l,right=t[k].r; if(l<=left&&right<=r)return t[k].ms; else { int mid=(left+right)>>1,ans=inf; if(l<=mid)ans=ask(k<<1,l,r); if(r>mid)ans=min(ans,ask(k<<1|1,l,r)); return ans; }}int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)scanf("%d",&a[i]); build(1,1,n); for(int i=1;i<=m;i++) { int p,x,y; scanf("%d%d%d",&p,&x,&y); if(p==1)anss[++tot]=ask(1,x,y); else insert(1,x,y); } for(int i=1;i
View Code

 

转载于:https://www.cnblogs.com/onioncyc/p/5778883.html

你可能感兴趣的文章
vsftpd 相关总结
查看>>
bash complete -C command
查看>>
解决zabbix 3.0中1151端口不能运行问题
查看>>
售前工程师的成长---一个老员工的经验之谈
查看>>
Get到的优秀博客网址
查看>>
redis的持久化方式
查看>>
Java面试题---代码题
查看>>
Python如何操作数据库?Python基础教程,第十四讲,数据库支持
查看>>
Git 删除远程仓库文件,并忽略提交文件
查看>>
win 2003 ftp
查看>>
对mysql的高并发优化配置的一些思考
查看>>
MSDN Webcast - Silverlight for Windows Phone 开发系列课程(1):Windows Phone平台概况
查看>>
OER 7451 in Load Indicator:Error Code=OSD-04500
查看>>
在 Linux/UNIX 终端下使用 nload 实时监控网络流量和带宽使用
查看>>
PROC 存储过程 二
查看>>
mysql删除数据,空间无法释放,alter
查看>>
iOS 计算文字高度
查看>>
xstream cdata 处理方式之一
查看>>
cubes mysql 中文乱码
查看>>
2014年的一些大数据事件
查看>>