题解:
我们首先枚举每个日期i,对于每个日期,对[1,i]区间内的值减去k,代表新增加了一天花费值
如果有了收入我们就把区间[第一天开始,这个工作开始得日子]加上val。
举个栗子:

首先:
看这张图,我们先假设他没有活干,那么假设经过了6天,每天花费对应的值为上图,
1.如果你在第一天去了那个地方,那么到了第六天,对应得花费就是数字1下面对应得数字
2.如果你在第二天去了那个地方,那么到了第六天,对应得花费就是数字2下面对应得数字
……
6.如果你在第六天去了那个地方,那么到了第六天,对应得花费就是数字6下面对应得数字
这样大概就明白了线段树储是如何储存得了。


其次:
如果我们在第4-6天有一份兼职工作,每天转val元,那么我们把这个工作加在区间[1,4]上,如图所示。
1.如果你在第一天去了那个地方,那么到了第六天,对应得花费就是数字1下面对应得数字
2.如果你在第二天去了那个地方,那么到了第六天,对应得花费就是数字2下面对应得数字
……
6.如果你在第四天去了那个地方,那么到了第六天,对应得花费就是数字4下面对应得数字

这里你可能会思考一个问题,如果工作时间再第七天结束怎么办,其实不必考虑这个问题,因为我们是按照每份工作得结束时间进行枚举得,既然他能加到线段树上去,那么结束时间必定是在这个日期之前结束得。

这个地方需要细品,理解了就会做了

其实这个题可以理解为区间最值查询,并且需要输出最值相对应的区间,所以线段树也要维护一下区间范围。

/*Keep on going Never give up*/
#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
const int maxn = 2e5+10;
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int mod = 100000000;
using namespace std;
struct wazxy{ll l,val,id;wazxy(ll x,ll y,ll z){l=x,val=y,id=z;}
};
vector<wazxy> v[maxn];
ll add[maxn<<2];
ll imax[maxn<<2];
ll section[maxn<<2];
void Add(int node,ll val){add[node]+=val;imax[node]+=val;return ;
}
void push_down(int node){  //这个跟上面的Add函数都是线段树的lazy操作if(!add[node]) return;Add(node*2,add[node]);   //pushdownAdd(node*2+1,add[node]);add[node]=0;
}
void build(int node,int start,int ends){  //新键线段树,这里新建的目的是要维护左端点值if(start==ends){section[node]=start;   //更新区间左端的值return;}int mid=(start+ends)/2;build(node*2,start,mid);build(node*2+1,mid+1,ends);
}void update(int node,int start,int ends,int l,int r,ll val){  //更新区间操作if(start>=l&&ends<=r){Add(node,val);return;}int mid=(start+ends)/2;push_down(node);if(l<=mid) update(node*2,start,mid,l,r,val);if(r>mid) update(node*2+1,mid+1,ends,l,r,val);//跟平时不同的是,不仅要对最值进行更新,// 同时也需要对每个最值对应的范围进行更新操作imax[node]=max(imax[node*2],imax[node*2+1]);if(imax[node]==imax[node*2]) section[node]=section[node*2];  //看看这个总的max是取了哪边区间的,对应更新其区间值else section[node]=section[node*2+1];}
int main(){ll n,k,ma=0;cin>>n>>k;for(int i=0;i<n;i++){ll x,y,val;scanf("%lld%lld%lld",&x,&y,&val);v[y].push_back(wazxy(x,val,i+1));  //这里吧y时间结束的的放在一个容器中,避免了排序ma=max(ma,y);}build(1,1,ma);ll ans=0,l,r;for(int i=1;i<=ma;i++){update(1,1,ma,1,i,-k);for(auto it : v[i]) update(1,1,ma,1,it.l,it.val);pair<ll,ll> z=make_pair(imax[1],section[1]);if(z.first>ans){   //更新答案区间ans=z.first,l=z.second,r=i;}}if(ans==0) cout<<0<<endl;else{vector<ll> aa;   for(int i=l;i<=r;i++){for(auto it : v[i]){if(it.l>=l) aa.push_back(it.id);}}printf("%lld %lld %lld %d\n",ans,l,r,aa.size());for(auto it : aa) printf("%lld ",it);cout<<endl;}return 0;
}

Trip to Saint Petersburg CodeForces-1250 C相关推荐

  1. Codeforces 1250 G Discarding Game —— 贪心

    This way/a> 题意: 现在你和一个机器人在比赛,共有n个回合,从1到n,每回合你会得到a[i]点值,机器人会得到b[i]点值,规则入下: 当有一个人的值大于等于k,那么这个人就会输掉比 ...

  2. Codeforces Round #396 (Div. 2) E. Mahmoud and a xor trip 二进制拆位+树型dp

    E. Mahmoud and a xor trip 链接: http://codeforces.com/contest/766/problem/E 题意: 给定一颗n节点的树以及每个节点的权值,另di ...

  3. 2019 6月编程语言_今年六月您可以开始学习650项免费的在线编程和计算机科学课程...

    2019 6月编程语言 Seven years ago, universities like MIT and Stanford first opened up free online courses ...

  4. 夏天和空调_您可以在今年夏天开始学习650项免费的在线编程和计算机科学课程...

    夏天和空调 Seven years ago, universities like MIT and Stanford first opened up free online courses to the ...

  5. 2020年国际学术会议参考列表

    IJAC年度重磅分享:2020重要国际学术会议列表,涵盖机器学习.人工智能.计算机视觉.模式识别.自动控制.机器人几大领域,部分未列入表格的会议,或未正式发布会讯,或为两年至三年举办一次.如会议网站无 ...

  6. 使用同一个目的port的p2p协议传输的tcp流特征相似度计算

    结论: (1)使用同一个目的port的p2p协议传输的tcp流特征相似度高达99%.如果他们是cc通信,那么应该都算在一起,反之就都不是cc通信流. (2)使用不同目的端口的p2p协议传输的tcp流相 ...

  7. Using Headless Mode in the Java SE Platform--转

    原文地址: By Artem Ananiev and Alla Redko, June 2006     Articles Index This article explains how to use ...

  8. MySQL coalesce()函数

    转载自  MySQL coalesce()函数 MySQL COALESCE函数介绍 下面说明了COALESCE函数语法: COALESCE(value1,value2,...); COALESCE函 ...

  9. 从JDBC ResultSet创建对象流

    Java 8中引入了Stream API和Lambda功能 ,使我们能够从JDBC ResultSet优雅地转换为仅提供映射功能的对象流. 这种功能当然可以是lambda. 基本上,这个想法是使用Re ...

最新文章

  1. plt.xlabel 'str' object is not callable
  2. Linux 安装 TigerVNC
  3. CentOS 7系统上部署Apache+PHP+MariaDB+xcache使用rpm,php module
  4. java boolean 对象_为什么Java后端用Boolean属性筛选不出对象,但改成String类型就可以了?...
  5. oracle当前用户创建的表不可见?
  6. [Leetcode] Path Sum II路径和
  7. Denise God Mode for mac(磁带饱和器音频插件)
  8. 不高兴INTEL挤牙膏,技术天才Jim Keller愤而辞职
  9. 制作pip源(按需,非镜像方式)
  10. 数中唯一只出现一次的数字
  11. 我的世界java种子 要塞,《我的世界》你绝对没见过的稀奇种子,恐龙骨架出现在要塞...
  12. WIN10访问linux分区「ext2fsd」
  13. Linux redis常用命令
  14. ABBYY教程—PDF识别模式如何使用?
  15. java时间戳的单位_java – SimpleDateFormat – 解析时间戳,以毫秒为单位
  16. 卡耐基梅隆大学计算机科学,卡耐基梅隆大学之计算机科学系
  17. 备品管理方案怎么写_备品备件管理制度62802
  18. 霸屏三大综艺 小度强势破圈引发“胜利者效应”
  19. excel切片器显示错误_带切片器的Excel弹出选择器工具
  20. 初探QQ空间本地安全问题!

热门文章

  1. 数据结构-图-遍历-搜索
  2. 大作文十大必背范文:五星级真题
  3. 基于Pytorch的从零开始的目标检测 | 附源码
  4. 收藏 | 图像分割深度学习从零开始学习路线
  5. Windows10 搭建java环境——JDK11的安装与eclipse的安装
  6. 控制客户端对同一个服务端地址的连接端口数量
  7. C#和F#默认接口方法更新
  8. 理解什么是MyBatis?
  9. 进阶高端,2017年vivo手机用实力说话
  10. 隐藏在程序旮旯中的“安全问题”