Apple Tree 树状数组习题

Apple Tree Poj (数据结构与算法期末复习)

题目链接:http://dapractise.openjudge.cn/2019hwall/003/

在这里插入图片描述
在这里插入图片描述

树状数组,单点更新,区间求和

代码是看了这位大佬的,https://www.cnblogs.com/gj-Acit/p/3236843.html
所以几乎就是把他的代码理解了一遍,然后自己再用C++写了一遍改动了一丢丢再加了点注释应该会稍微好懂一点。(树状数组的PPT看完了就应该可以不需要太费脑去看懂这个代码了吧)

代码
#include <iostream>
#include<vector>
#include<string.h>
using namespace std;
#define MAXL 100005
typedef vector<int> VE;
vector<VE> edge(MAXL);//用于存储边
int Left[MAXL], Right[MAXL], Fork[MAXL], C[MAXL];
//Left,Right分别是一个Fork的左右边界(可以相等)
//Fork中0代表空,1代表有苹果;C其实是对Fork数组的相应树状数组
int n, m, key;
int lowbit(int t)
{
   
 return (t & 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 将数组中的元素按照字母顺序排序。 ```javascript const arr = ['banana', 'apple', 'orange', 'grape']; const sortedArr = arr.sort(); console.log(sortedArr); // ['apple', 'banana', 'grape', 'orange'] ``` 2. 求出数组中所有元素的和。 ```javascript const arr = [1, 2, 3, 4, 5]; const sum = arr.reduce((a, b) => a + b); console.log(sum); // 15 ``` 3. 统计数组中每个元素出现的次数。 ```javascript const arr = ['apple', 'banana', 'orange', 'apple', 'banana', 'grape']; const counts = arr.reduce((acc, curr) => { if (curr in acc) { acc[curr]++; } else { acc[curr] = 1; } return acc; }, {}); console.log(counts); // {apple: 2, banana: 2, orange: 1, grape: 1} ``` 4. 去掉数组中的重复元素。 ```javascript const arr = ['apple', 'banana', 'orange', 'apple', 'banana', 'grape']; const uniqueArr = [...new Set(arr)]; console.log(uniqueArr); // ['apple', 'banana', 'orange', 'grape'] ``` 5. 将数组中的元素转换为大写字母。 ```javascript const arr = ['apple', 'banana', 'orange', 'grape']; const upperCaseArr = arr.map(x => x.toUpperCase()); console.log(upperCaseArr); // ['APPLE', 'BANANA', 'ORANGE', 'GRAPE'] ``` 6. 返回数组中最大元素。 ```javascript const arr = [1, 3, 5, 2, 4]; const max = Math.max(...arr); console.log(max); // 5 ``` 7. 将数组中的元素倒序排列。 ```javascript const arr = ['apple', 'banana', 'orange', 'grape']; const reversedArr = arr.reverse(); console.log(reversedArr); // ['grape', 'orange', 'banana', 'apple'] ``` 8. 求出对象中所有属性值的和。 ```javascript const obj = {a: 1, b: 2, c: 3, d: 4}; const sum = Object.values(obj).reduce((a, b) => a + b); console.log(sum); // 10 ``` 9. 统计对象中每个属性值出现的次数。 ```javascript const obj = {a: 'apple', b: 'banana', c: 'apple', d: 'grape'}; const counts = Object.values(obj).reduce((acc, curr) => { if (curr in acc) { acc[curr]++; } else { acc[curr] = 1; } return acc; }, {}); console.log(counts); // {apple: 2, banana: 1, grape: 1} ``` 10. 将对象中所有属性值转换为大写字母。 ```javascript const obj = {a: 'apple', b: 'banana', c: 'orange', d: 'grape'}; const upperCaseObj = Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, v.toUpperCase()])); console.log(upperCaseObj); // {a: 'APPLE', b: 'BANANA', c: 'ORANGE', d: 'GRAPE'} ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值