线段树专题训练 ゝ一纸荒年。 2023-07-09 05:25 4阅读 0赞 ### ### * 【HDU】1166 - 敌兵布阵 # 【HDU】1166 - 敌兵布阵 # > 原题链接:[http://acm.hdu.edu.cn/showproblem.php?pid=1166][http_acm.hdu.edu.cn_showproblem.php_pid_1166] **题意:** 第一行一个整数 T,表示有 T 组数据。 每组数据第一行一个正整数 N(N<=50000),表示敌人有 N 个工兵营地,接下来有 N 个正整数,第 i 个正整数 ai 代表第 i 个工兵营地里开始时有 ai 个人(1 <= ai <= 50)。 接下来每行有一条命令,命令有 4 种形式: (1) Add i j,i 和 j 为正整数,表示第 i 个营地增加 j 个人( j 不超过30) (2)Sub i j ,i 和 j 为正整数,表示第 i 个营地减少 j 个人( j 不超过30) (3)Query i j ,i 和 j 为正整数,i <= j,表示询问第i到第 j 个营地的总人数 (4)End 表示结束,这条命令在每组数据最后出现 **思路:** 线段树经典题目,当然也是树状数组裸题。记得加上iios::sync\_with\_stdio(0); ,卡时间点,要不然就用scanf,printf。 **Code:** #include <iostream> #include <cstring> using namespace std; const int N = 5e4+100; int a[N]; char str[10]; struct node{ int l,r,m; }tree[N<<2]; void build_tree(int node,int l,int r){ tree[node].l=l, tree[node].r=r; if(l==r){ tree[node].m=a[l]; return; } int mid=(l+r)>>1; build_tree(node<<1,l,mid); build_tree(node<<1|1,mid+1,r); tree[node].m=tree[node<<1].m+tree[node<<1|1].m; } int query(int node,int l,int r){ if(tree[node].l==l && tree[node].r==r) return tree[node].m; int mid=(tree[node].l+tree[node].r)>>1; if(r<=mid) return query(node<<1,l,r); else if(l>mid) return query(node<<1|1,l,r); else return query(node<<1,l,mid)+query(node<<1|1,mid+1,r); } void add(int node,int i,int j){ if(tree[node].l==tree[node].r){ tree[node].m+=j; return; } else{ tree[node].m+=j; if(i<=tree[node<<1].r) add(node<<1,i,j); else add(node<<1|1,i,j); } } int main(){ ios::sync_with_stdio(0); int t; cin>>t; for(int k=1;k<=t;k++){ int n; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; cout<<"Case "<<k<<":"<<endl; build_tree(1,1,n); while(cin>>str){ if(!strcmp(str,"End")) break; int i,j; cin>>i>>j; if(!strcmp(str,"Add")) add(1,i,j); if(!strcmp(str,"Sub")) add(1,i,-j); if(!strcmp(str,"Query")) cout<<query(1,i,j)<<endl; } } return 0; } [http_acm.hdu.edu.cn_showproblem.php_pid_1166]: http://acm.hdu.edu.cn/showproblem.php?pid=1166
相关 线段树专题训练 【HDU】1166 - 敌兵布阵 【HDU】1166 - 敌兵布阵 > 原题链接:[http://acm.hdu.edu.cn/showp ゝ一纸荒年。/ 2023年07月09日 05:25/ 0 赞/ 5 阅读
相关 线段树 [http://www.cnblogs.com/shuaiwhu/archive/2012/04/22/2464583.html][http_www.cnblogs.com_s 迈不过友情╰/ 2022年09月20日 09:13/ 0 赞/ 291 阅读
相关 线段树 1、概述 线段树,也叫区间树,是一个完全二叉树,它在各个节点保存一条线段(即“子数组”),因而常用于解决数列维护问题,它基本能保证每个操作的复杂度为O(lgN)。 2、线段 分手后的思念是犯贱/ 2022年08月10日 10:53/ 0 赞/ 251 阅读
相关 线段树 Ⅱ 单点修改(内容有升级) \[hdu2795\] ([http://acm.hdu.edu.cn/showproblem.php?pid=2795][http_acm.hdu 朴灿烈づ我的快乐病毒、/ 2022年08月03日 13:45/ 0 赞/ 312 阅读
相关 线段树专题 线段树,类似区间树,是一个完全二叉树,它在各个节点保存一条线段/一段区间(数组中的一段子数组),主要用于解决连续区间的动态查询问题。 关于线段树的建立(以 1 2 3 4 5 左手的ㄟ右手/ 2022年07月14日 01:29/ 0 赞/ 24 阅读
相关 线段树 线段树入门: 转载博客:[点击打开链接][Link 1] 前几天开始接触线段树,其一些基本的操作还是很容易理解的,但是区间更新我着实理解了好一会(因该是本人太菜),今天有时 Myth丶恋晨/ 2022年05月29日 22:16/ 0 赞/ 351 阅读
相关 线段树 一 概述 线段树,类似区间树,它在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,它基本能保持每个操作的复杂度为O(l 川长思鸟来/ 2022年05月17日 05:53/ 0 赞/ 333 阅读
相关 线段树 线段树(单点修改) 1 include <bits/stdc++.h> 2 using namespace std; 3 4 stru 亦凉/ 2021年12月03日 07:17/ 0 赞/ 408 阅读
相关 线段树 转载 [https://www.cnblogs.com/TheRoadToTheGold/p/6254255.html][https_www.cnblogs.com_TheRo 心已赠人/ 2021年07月16日 15:21/ 0 赞/ 542 阅读
还没有评论,来说两句吧...