链接:https://ac.nowcoder.com/acm/contest/941/B
来源:牛客网

题目描述

春希想听和纱弹钢琴!
为了阻止异变的发生,Pi将钢琴魔改了
钢琴上有 N 个键,每个键有音高、音色、春希度三种属性
和纱需要依次敲击若干个键,这些键的春希度之和越大,春希就越满意
然而由于Pi的魔改,一个键被敲下后,该键和所有音高或音色小于它的键都会坏掉(坏掉即不能再被敲击)
Pi想知道在这种情况下,和纱能弹琴的最大春希度之和

输入描述:

第一行一个数,为按键个数 N
接下来 N 行每行三个数,分别表示第 i 个键的音高、音色、春希度

输出描述:

一行一个数,为最大的春希度和
示例1

输入

复制

3
1 1 2
1 3 5
2 1 7

输出

复制

9

备注:

20% N≤10N\leq 10N≤10
50% N≤1000N\leq 1000N≤1000
90% N≤105N\leq 10^5N≤105
100% N≤106N\leq 10^6N≤106, 输入中所有数均为正整数且 ≤108\leq 10^8≤108 emm这题正解树状数组???(但是我永远喜欢线段树并且永远讨厌离散化所以就用动态开点线段树写了qvq
最简单的动态开点线段树单点修改区间查值操作
改到最后还是90pts emmm线段树的常数还是大了而且1000000乘上logINF也不太遭得住
注意的是那个根一开始是取0的emmmm
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#define int long long
using namespace std; const int maxn=;
const int INF=; struct node{
int w;
signed son[];
}tr[maxn<<]; struct qvq{
int x,y,w;
}a[maxn];
inline int max(int x,int y) {
return x>y?x:y;
} inline bool cmp(qvq x,qvq y) {
if (x.x==y.x) return x.y<y.y;
return x.x<y.x;
} int cnt;
inline void add(signed &now,int l,int r,int loc,int w) {
if (!now) now=++cnt;
tr[now].w=max(w,tr[now].w);
if (l==r) return;
int mid=l+r>>;
if (loc<=mid) add(tr[now].son[],l,mid,loc,w);
if (mid+<=loc) add(tr[now].son[],mid+,r,loc,w);
} inline int query(signed now,int l,int r,int x,int y) {
if (!now) return ;
if (x<=l && r<=y) return tr[now].w;
int ans=,mid=l+r>>;
if (x<=mid) ans=max(ans,query(tr[now].son[],l,mid,x,y));
if (mid+<=y) ans=max(ans,query(tr[now].son[],mid+,r,x,y));
return ans;
} signed main(){
int n;
scanf("%lld",&n);
for (int i=;i<=n;i++)
scanf("%lld%lld%lld",&a[i].x,&a[i].y,&a[i].w);
sort(a+,a+n+,cmp);
int ans=;
for (int i=;i<=n;i++) {
signed rt=;
if (i>) rt=;
int val=query(rt,,INF,,a[i].y)+a[i].w;
ans=max(ans,val);
add(rt,,INF,a[i].y,val);
}
printf("%lld",ans);
}
 

牛客周赛11TG B-弹钢琴的更多相关文章

  1. 牛客OI周赛9-提高组题目记录

    牛客OI周赛9-提高组题目记录 昨天晚上做了这一套比赛,觉得题目质量挺高,而且有一些非常有趣而且非常清奇的脑回路在里边,于是记录在此. T1: 扫雷 题目链接 设 \(f_i\) 表示扫到第 \(i\ ...

  2. 牛客OI周赛8-提高组A-用水填坑

    牛客OI周赛8-提高组A-用水填坑 题目 链接: https://ac.nowcoder.com/acm/contest/403/A 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制: ...

  3. 栈的压入、弹出顺序 牛客网 剑指Offer

    栈的压入.弹出顺序 牛客网 剑指Offer 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是 ...

  4. 牛客OI周赛7-提高组 A 小睿睿的等式

    链接:https://ac.nowcoder.com/acm/contest/371/A来源:牛客网 小睿睿在游戏开始时有n根火柴棒,他想知道能摆成形如“A+B=n”的等式且使用的火柴棒数也恰好等于n ...

  5. 牛客OI周赛7-提高组 B小睿睿的询问(ST打表)

    链接:https://ac.nowcoder.com/acm/contest/371/B来源:牛客网 小睿睿的n个妹纸排成一排,每个妹纸有一个颜值val[i].有m个询问,对于每一个询问,小睿睿想知道 ...

  6. 牛客OI周赛7-普及组 解题报告

    出题人好评. 评测机差评. A 救救喵咪 二位偏序.如果数据范围大的话直接树状数组,不过才1000就\(O(n^2)\)暴力就ok了. #include <bits/stdc++.h> s ...

  7. 牛客OI周赛2-提高组

    A.游戏 链接:https://www.nowcoder.com/acm/contest/210/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语 ...

  8. 牛客OI周赛10-普及组-A眼花缭乱的街市-(加速+二分)

    https://ac.nowcoder.com/acm/contest/901/A 很简单的一道题,全场只有20+AC,卡时间.新学了cin加速语法和数组二分查找的函数调用. 知道有个读写挂,可以加速 ...

  9. 牛客OI周赛11-普及组 B Game with numbers (数学,预处理真因子)

    链接:https://ac.nowcoder.com/acm/contest/942/B 来源:牛客网 Game with numbers 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C+ ...

随机推荐

  1. django-实现登录短信验证

    功能演示 核心任务 前端功能: 点击按钮Ajax调用发送验证码功能 输完验证码后Ajax调用验证功能 后端功能: 功能1:发送验证码功能 功能2:验证码检查 后台核心逻辑(不需要手写) 功能3:发短信 ...

  2. Js判断值是否是NaN

    方法一:window.isNaN() 注意: window.isNaN 只对数值有效,如果传入其他值,会被先转成数值.比如,传入字符串的时候,字符串会被先转成NaN,所以最后返回true,这一点要特别 ...

  3. 如鹏网仿QQ侧滑菜单:ResideMenu组件的使用笔记整理+Demo

    ResideMenu菜单 课堂笔记: https://github.com/SpecialCyCi/AndroidResideMenu Github:如何使用开源组件1. 下载 下载方式: 1. 项目 ...

  4. UIView动画的使用

    下面介绍三种简单的UIView动画的使用,如果在项目中对动画没有太多“细致化”的设计要求,基本够用了. 一.首尾式动画 说明:如果只是修改控件的属性,使用首尾式动画还是很方便的,如果还需要在动画完成后 ...

  5. 解决安装PyMySQL一直停在Building wheels for collected package:cryptography, cffi, pycparser的问题

    我的运行环境为: 硬件:树莓派3b 系统:ubuntu_meta_16.04.2 因为项目需要,我在树莓派上搭建了基于python编程的Django的web框架,需要从MySQL中读取树莓派以及传感器 ...

  6. Oracle个人自学笔记

    SET LINESIZE 300;//设置每一行的长度 SET PAGESIZE 100;//设置每一列的长度 CONN 用户名/密码 [AS SYSDBA],如果是sys用户一定要加上SYSDBA ...

  7. Java 并发锁

    Java 中的锁 阻塞锁.可重入锁.读写锁.互斥锁.悲观锁.乐观锁.公平锁.偏向锁.对象锁.线程锁.锁粗化.锁消除.轻量级锁.重量级锁.信号量.独享锁.共享锁.分段锁 一.常见的锁 synchroni ...

  8. 实用类-<Math类常用>

    Math.random() //取0~1之间的随机数(不包括1) Math.max(数字1,数字2) //取两个数中最大的一个 Math.min(数字1,数字2) //取两个数中最小的一个 Math. ...

  9. java垃圾回收学习

    经过一个晚上的努力终于完成了一个文件替换指定字符串的程序,但是由于我要替换的全站程序html文件太多, 所以eclipse下边老是在一个目录结束后报出java.lang.OutOfMemoryErro ...

  10. Unsafe作用