51NOD 1287 加农炮(不水的线段树)
2024-09-30 22:13:12
Input示例 Output示例
思路:刚开始以为结点存最大值就行了,然后大于左子树的最大值就能进入右子树;然后发现样例都过不了;后面发现,并不是这个样子,假如这个数小于等于右孩子最左边那个数的话,也不能进入有孩子,所以结点还得保存右孩子最左边的那个值;同时更新一个最大值,当输入值咸鱼等于a[0]或者大于最大值时跳过。
#include<climits>
#include<iostream>
#include<algorithm>
using namespace std; #define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define ll long long
const int maxn = 5e4 + ;
ll tree[maxn << ], mtree[maxn << ], a[maxn];
ll ma = INT_MIN; void build(int l, int r, int rt)
{
if (l == r){
tree[rt] = a[l];
mtree[rt] = a[l];
return;
}
int m = (l + r) >> ;
build(lson);
build(rson);
tree[rt] = max(tree[rt << ], tree[rt << | ]);
mtree[rt] = mtree[rt << ];
}
void update(int x, int l, int r, int rt)
{
if (l == r){
a[l] += ;
tree[rt] += ;
mtree[rt] += ;
if (a[l] > ma)ma = a[l];
return;
}
int m = (l + r) >> ;
if (tree[rt << ] < x&&x>mtree[rt << | ]) update(x, rson);
else update(x, lson);
tree[rt] = max(tree[rt << ], tree[rt << | ]);
mtree[rt] = mtree[rt << ];
}
void Print(int l, int r, int rt)
{
if (l == r){
cout << rt << " = " << tree[rt] << endl;
return;
}
cout << rt << " = " << tree[rt] << endl;
int m = (r + l) >> ;
if (l <= m)Print(lson);
if (r > m)Print(rson);
}
int main()
{
std::ios::sync_with_stdio(false);
int m, n; cin >> m >> n; for (int i = ; i <= m; i++){
cin >> a[i];
if (ma < a[i])ma = a[i];
}
build(, m, ); int temp;
while (n--){
cin >> temp;
if (temp <= a[] || temp>ma)
continue;
update(temp, , m, );
//Print(1, m, 1);
}
for (int i = ; i <= m; i++){
if (i != )cout << endl;
cout << a[i];
} }
最新文章
- Ext小总结
- git .gitignore
- jQuery-认识JQuery,jQuery选择器
- Ubuntu中vi常用命令
- paip.字符串操作uapi java php python总结..
- 黑马程序员_Java基本数据的自动拆装箱及享元设计模式视频学习笔记
- 近期H5项目开发小结
- EOJ-1708//POJ3334
- 网页、JavaScript 的DOM操作
- Java 之 HTML
- Asp.Net 常用工具类之Office-文档操作(6)
- EF 中 Code First 的数据迁移以及创建视图
- dotweb框架之旅 [二] - 常用对象-App(dotweb)
- iOS图形手势识别框架SGGestureRecognizer
- Http和Https有什么区别
- 带着新人学springboot的应用07(springboot+RabbitMQ 下)
- 前端使用Javascrip实现图片轮播
- [LeetCode] 系统刷题4_Binary Tree &; Divide and Conquer
- windows 2003 IIS 设置 FTP被动模式
- vue-devtools chrome 开发工具
热门文章
- 用户能够在下次登录系统时被重新配置---或win10早期更新不成功的bug就需要删除多余的登陆用户
- codeforces 402E - Strictly Positive Matrix【tarjan】
- 使用Gitalk实现静态页面评论的功能
- Classic BADI总结
- 一张图带你了解-常见面试之JUC包详解
- 自动生成 html5 小页面
- GitHub安装使用教程
- Previous operation has not finished; run &#39;cleanup&#39; if it was interrupted.SVN报错
- 【转】Java实现将文件或者文件夹压缩成zip
- Scala-基础-函数(1)