当前位置: 首页 > news >正文

3-26 备赛

今天复习了 树状数组、RMQ区间最大值问题、01背包问题
天梯赛补题目 、校赛补题

树状数组
https://blog.csdn.net/weixin_44777363/article/details/107254870
讲的比较清楚的csdn博客。
在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
using ll = long long;
ll a[N], b[N];
int n, q;
// 计算lowbit的
int lowbit(int x)
{return x & (-x);
}
void add(int p, int x)
{while (p <= n){b[p] += x;p += lowbit(p);}
}
ll count(int p)
{ll result = 0;while (p){result += b[p];p -= lowbit(p);}return result;
}
int main()
{cin >> n >> q;for (int i = 1; i <= n; i++){cin >> a[i];}for (int i = 1; i <= n; i++){add(i, a[i]);}while (q--){int k, l, r;cin >> k >> l >> r;if (k == 0){ll res = count(r) - count(l - 1);cout << res << endl;}else{add(l, r);}}
}

树状数组的题目:
https://www.acwing.com/problem/content/1217/
蓝桥杯真题:

交换小朋友的位置,对应的区间需要加上一个数字
最后是需要查询所有的数字。

n是1e5次方,如何解决呢?

#include<bits/stdc++.h>
using namespace std;
const int N = 1000010;
int n;
long long a[N],tr[N],b[N]={0};int lowbit(int x){return x&-x;
}void add(int x,int y){for(int i=x;i<N;i+=lowbit(i)) tr[i]+=y;
}int query(int x){int ans=0;for(int i=x;i;i-=lowbit(i)) ans+=tr[i];return ans;
}
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];a[i]++; //避免0}for(int i=1;i<=n;i++){add(a[i],1);b[i]=(i)-query(a[i]); //比这个数大的个数}// cout<<endl;memset(tr,0,sizeof tr); //该逆序算了,所以维护树状数组不一样,所以算完大的要清0.for(int i=n;i>=1;i--){add(a[i],1);b[i]+=query(a[i]-1);  //比这个数小}long long res=0;// for(int i=1;i<=n;i++){//     cout<<b[i]<<endl;// }for(int i=1;i<=n;i++){res+=(1+b[i])*b[i]/2;}cout<<res<<endl;return 0;
}

RMQ问题

#include <bits/stdc++.h>
using namespace std;
int n, t, q;
const int N = 2e5 + 10;
const int M = 25;
int a[N], Log[N];
int f[N][M];
void GetLog()
{int i;Log[1] = 0;for (i = 2; i <= n + 1; ++i)Log[i] = Log[i / 2] + 1;
}
void RMQ()
{int i, j;for (i = 1; i <= n; ++i)f[i][0] = a[i];for (j = 1; (1 << j) <= n; ++j)for (i = 1; i + (1 << (j - 1)) <= n; ++i)f[i][j] = max(f[i][j - 1], f[i + (1 << (j - 1))][j - 1]);
}
int main()
{cin >> n >> t >> q;for (int i = 1; i <= n; ++i)cin >> a[i];GetLog();RMQ();for (int i = 1; i <= t; ++i){int l, r;scanf("%d%d", &l, &r);int k = Log[r - l + 1];int ans = max(f[l][k], f[r - (1 << k) + 1][k]);if (ans >= q){cout << ans << ' ' << "YES" << endl;}else{cout << ans << ' ' << "NO" << endl;}}return 0;
}

相关文章:

  • Java内存模型简述
  • 前段项目结构
  • 7-24 约分最简分式(PTA)
  • ES聚合查询
  • Vue3更新Package.json版本号
  • 海外云手机如何帮助亚马逊引流?
  • 自定义类型(2)
  • 各城市宗族文化姓氏占比数据
  • 微服务篇:设计一个注册中心和配置中心需要从哪些方面入手
  • 工具 - DBeaver 的简单使用
  • 代码随想录算法训练营第三十五天 | LeetCode860.柠檬水找零、406.根据身高重建队列 、 452. 用最少数量的箭引爆气球
  • 【C语言】 字符输入输出函数getchar()和 putchar()的用法
  • 2020-Structure Aware Negative Sampling in Knowledge Graphs
  • Codeup_5972:问题 A: 【递归入门】全排列
  • Springboot快速整合bootstrap-table使用,接口对接
  • 自己简单写的 事件订阅机制
  • Angular2开发踩坑系列-生产环境编译
  • es6
  • ES学习笔记(12)--Symbol
  • Intervention/image 图片处理扩展包的安装和使用
  • Js基础知识(一) - 变量
  • JS实现简单的MVC模式开发小游戏
  • python学习笔记 - ThreadLocal
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 和 || 运算
  • 将 Measurements 和 Units 应用到物理学
  • 免费小说阅读小程序
  • 如何优雅地使用 Sublime Text
  • 双管齐下,VMware的容器新战略
  • 写给高年级小学生看的《Bash 指南》
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • k8s使用glusterfs实现动态持久化存储
  • 阿里云重庆大学大数据训练营落地分享
  • 通过调用文摘列表API获取文摘
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​ssh免密码登录设置及问题总结
  • # Panda3d 碰撞检测系统介绍
  • #Ubuntu(修改root信息)
  • $GOPATH/go.mod exists but should not goland
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (09)Hive——CTE 公共表达式
  • (1)Android开发优化---------UI优化
  • (2.2w字)前端单元测试之Jest详解篇
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (Oracle)SQL优化技巧(一):分页查询
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (一)SpringBoot3---尚硅谷总结
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • ***测试-HTTP方法
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET 指南:抽象化实现的基类
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • @Autowired 与@Resource的区别