luogu P2073 送花 线段树
思路&心路
一眼认定沙比提
写的比较慢,写了1小时吧
开心的交上去
卧槽,只有20?
不服不服,拿着题解的代码去对拍
Emma,<100没问题
100000数据错了,还只是错了一个数据
debug 啊debug啊
以为是数据是0的锅
终于早出了小样例
卧槽,这std不对啊,md
又换了个std
绝望的乱改一通
最后发现是tm vis数组开小了
其实第一遍就能过的
╮(╯▽╰)╭
代码
#include <iostream>
#include <cstdio>
#define ll long long
#define ls rt << 1
#define rs rt << 1 | 1
using namespace std;
const int maxn = 1e5 + 7;
const int maxm = 4e5 + 7;
const int inf = 0x3f3f3f3f;
bool vis[maxn*10];
int js,gs;
struct node {
int l, r, ma, mi;
ll meili, jiazhi;
} e[maxm];
int read() {
int x = 0, f = 1; char s = getchar();
for (; s > '9' || s < '0'; s = getchar()) if (s == '-') f = -1;
for (; s >= '0' && s <= '9'; s = getchar()) x = (x << 3) + (x << 1) + s - '0';
return x * f;
}
void pushup(int rt) {
e[rt].ma = max(e[ls].ma, e[rs].ma);
e[rt].mi = min(e[ls].mi, e[rs].mi);
e[rt].meili = e[ls].meili + e[rs].meili;
e[rt].jiazhi= e[ls].jiazhi+ e[rs].jiazhi;
}
void build(int l, int r, int rt) {
e[rt].l = l,e[rt].r = r,e[rt].mi = inf;
if(l == r) return;
int mid=(l + r) >> 1;
build(l,mid,ls);
build(mid+1,r,rs);
pushup(rt);
}
void update(int L, int w, int c, int rt) {
if(e[rt].l == e[rt].r) {
e[rt].meili = w;
e[rt].jiazhi = c;
e[rt].ma = e[rt].mi = c;
return;
}
int mid=(e[rt].l + e[rt].r) >> 1;
if(L <= mid) update(L, w, c, ls);
else update(L, w, c, rs);
pushup(rt);
}
void find_min(int rt) {
if(e[rt].l == e[rt].r) {
vis[e[rt].jiazhi] = 0;
e[rt].meili = 0;
e[rt].jiazhi = 0;
e[rt].ma = 0;
e[rt].mi = inf;
return;
}
if(e[ls].mi < e[rs].mi) find_min(ls);
else find_min(rs);
pushup(rt);
}
void find_max(int rt) {
if(e[rt].l == e[rt].r) {
vis[e[rt].jiazhi] = 0;
e[rt].meili = 0;
e[rt].jiazhi = 0;
e[rt].ma = 0;
e[rt].mi = inf;
return;
}
if(e[ls].ma > e[rs].ma) find_max(ls);
else find_max(rs);
pushup(rt);
}
int main() {
build(1, 1e5, 1);
while (233) {
int tmp = read();
if (tmp == 1) {
int a = read(),b = read();
if(!vis[b]) {
vis[b] = 1;
update(++ js, a, b, 1);
gs++;
}
} else if (tmp == 2) {
if(gs) {
find_max(1);
gs--;
}
} else if (tmp == 3) {
if(gs) {
find_min(1);
gs--;
}
} else break;
}
cout << e[1].meili << " " << e[1].jiazhi << "\n";
return 0;
}
luogu P2073 送花 线段树的更多相关文章
- [Luogu] 可持久化线段树 1(主席树)
https://www.luogu.org/problemnew/show/P3834 #include<cstdio> #include<iostream> #include ...
- Luogu P5280 [ZJOI2019]线段树
送我退役的神题,但不得不说是ZJOIDay1最可做的一题了 先说一下考场的ZZ想法以及出来后YY的优化版吧 首先发现每次操作其实就是统计出增加的节点个数(原来的不会消失) 所以我们只要统计出线段树上每 ...
- luogu 1712 区间(线段树+尺取法)
题意:给出n个区间,求选择一些区间,使得一个点被覆盖的次数超过m次,最小的花费.花费指的是选择的区间中最大长度减去最小长度. 坐标值这么大,n比较小,显然需要离散化,需要一个技巧,把区间转化为半开半闭 ...
- Luogu P3960 列队 线段树
题面 线段树入门题. 我们考虑线段树来维护这个矩阵. 首先我们先定n+1棵线段树前n棵维护每行前m-1个同学中没有离队过的同学,还有一棵维护第m列中没有离队过的同学.再定n+1棵线段树前n棵线段树维护 ...
- Luogu P1471 方差 线段树
那是上上周...也是重构了四遍...后来GG了...今天又拾起,搞了搞终于过了... 好吧就是个线段树,公式懒得推了https://www.cnblogs.com/Jackpei/p/10693561 ...
- Luogu P2073 送花
权值线段树的模板题 然而AC后才发现,可以用\(\tt{set}\)水过-- 权值线段树类似于用线段树来实现平衡树的一些操作,代码实现还是比较方便的 #include<iostream> ...
- 【题解】Luogu P2073 送花
原题传送门 这题需要用到Splay 我们用一棵splay维护金钱 考虑c<=1000000 我们珂以把每种价格现在对应的美丽值存在一个a数组中 这样讲有珂能不太清楚qaq,还是对着操作一个一个讲 ...
- Luogu P2073 送花 set
这题...一眼set...但是打了一会儿.. 记录一下每个价格对应的美丽度,顺便充当vis数组,如果美丽度不为0,说明set里已经有了... 删除好说,删*s.begin()和*--s.end()就好 ...
- 洛谷P2073 送花 [2017年6月计划 线段树01]
P2073 送花 题目背景 小明准备给小红送一束花,以表达他对小红的爱意.他在花店看中了一些花,准备用它们包成花束. 题目描述 这些花都很漂亮,每朵花有一个美丽值W,价格为C. 小明一开始有一个空的花 ...
随机推荐
- 从0开始做一个的Vue图片/ 文件选择(上传)组件[基础向]
原文:http://blog.csdn.net/sinat_17775997/article/details/58585142 之前用Vue做了一个基础的组件 vue-img-inputer ,下面就 ...
- sql server低版本到高版本还原,找不到备份集
关键词:sql server低版本到高版本还原 故障问题,图中备份集(红色框线部分)没有数据,无法选择,导致无法还原 解决办法: [1] 低版本的备份到高版本的,用语句可以还原 注意事项: 低版本不一 ...
- mysql 权限管理 针对库 授权 db.*
需求 只放行user表 db1库的select权限 mysql> grant select on db1.* to 'mike'@'localhost'; Query OK, rows affe ...
- PHPExcel使用-使用PHPExcel导出文件-导出MySQL数据
现在数据库里面有一组数据,我们将它按照不同的难度进行分sheet. 首先我们需要写一个mysql的配置文件- db.config.php(utf-8编码) : <?php $dbconfig= ...
- pycharm进行调试[转载]
转自:https://blog.csdn.net/william_hehe/article/details/80898031 1.首先设置断点. 2.Step into(F7):进入 若函数A内存在子 ...
- iOS手机应用开发原型模板及开发流程
在开始做一个项目的时候,究竟需要准备些什么前期工作呢,在外包公司中,又是一个怎么样的开发步骤呢?下面,按照我的理解,说一下. 项目流程图 看上图,从左往右,如果我们仅是一名开发工程师,只需要关心上图中 ...
- Vim/Vi的使用
Vim 是vi的加强 Gvim图形化的vim Vim/Vi简介 Vim/Vi是一个功能强大的全屏幕文本编辑器,是Linux/Unix上最常用的文本编辑器,他们 的作用是建立,编辑,显示文本文件 Vi ...
- js里实现给数字加三位一逗号间隔的两种方法
方法一: <script type= "text/javascript"> var num_s = "1232134456.546 ";ale ...
- LinkedList详解
一.LinkedList的介绍与特点. 1.继承实现关系. 实现了双端队列接口Deque,因此具有双端队列的功能:addFirt,addLast,offerFirt,offerLast,removeF ...
- 【转】Linux进程绑CPU核
1. 什么是绑核? 所谓绑核,其实就是设定某个进程/线程与某个CPU核的亲和力(affinity).设定以后,Linux调度器就会让这个进程/线程只在所绑定的核上面去运行.但并不是说该进程/线程就独占 ...