解析

也就是说建一棵权值线段树维护这些信息。要注意的是每次的最优解必然是 \(b\) 小的先做,故离线排序确定离散后的下标再依次求解

\(Code\)

#include<cstdio>
#include<algorithm>
#define ls (k << 1)
#define rs (ls | 1)
#define LL long long
using namespace std; const int N = 200005;
int n , m , rd[N]; struct node{
int a , b , id , k;
}e[N] , ind[N]; struct segment{
LL a , b;
}seg[N << 2]; inline bool cmp1(node x , node y){return x.b < y.b;} inline void insert(int l , int r , int k , int x , segment y)
{
if (l == r)
{
seg[k].a = y.a , seg[k].b = y.b;
return;
}
int mid = (l + r) >> 1;
if (x <= mid) insert(l , mid , ls , x , y);
else insert(mid + 1 , r , rs , x , y);
seg[k].a = seg[ls].a + seg[rs].a;
seg[k].b = max(seg[ls].b , seg[rs].b - seg[ls].a);
} int main()
{
scanf("%d%d" , &n , &m);
for(register int i = 1; i <= n; i++) scanf("%d%d" , &e[i].a , &e[i].b) , e[i].id = i , ind[i] = e[i];
for(register int i = 1; i <= m; i++)
scanf("%d%d%d" , &e[i + n].k , &e[i + n].a , &e[i + n].b) , e[i + n].id = i + n , ind[i + n] = e[i + n];
sort(ind + 1 , ind + n + m + 1 , cmp1);
for(register int i = 1; i <= n + m; i++) rd[ind[i].id] = i;
for(register int i = 1; i <= n; i++) insert(1 , n + m , 1 , rd[e[i].id] , segment{e[i].a , e[i].b});
for(register int i = 1; i <= m; i++)
{
insert(1 , n + m , 1 , rd[e[i + n].k] , segment{0 , 0});
insert(1 , n + m , 1 , rd[e[i + n].id] , segment{e[i + n].a , e[i + n].b});
rd[e[i + n].k] = rd[e[i + n].id];
printf("%d\n" , seg[1].b);
}
}

最新文章

  1. Java GUI编程-(项目代码_扫雷_弹钢琴)
  2. Linux系统下 解决Qt5无法连接MySQL数据库的方法
  3. MySQL数据库中的哈希加密
  4. SQL每个用户最后的一条记录
  5. IE下兼容Css+HTML5
  6. php反射类 ReflectionClass
  7. 设置Windows 8.1屏幕自己主动旋转代码, Auto-rotate function code
  8. 大约SQL/NoSQL数据库搜索/思考查询
  9. The Swift Programming Language-官方教程精译Swift(3)基本运算符
  10. 图解vue生命周期
  11. Eclipse 中构建 Maven 项目的完整过程 - SpringBoot 项目
  12. Creating an LMDB database in Python
  13. LINQ解析
  14. 苹果手机显示分享链接的方法html页面
  15. Hadoop中 Unable to load native-hadoop library for your platform... using builtin-java classes where applicable问题解决
  16. if else的使用以及如何从键盘获取数值
  17. WorldWind源码剖析系列:二维点类Point2d和三维点类Point3d
  18. 如何在O(n)的时间复杂度内找出数组中出现次数超过了一半的数
  19. TCP协议端口状态说明:CLOSE-WAIT、TIME-WAIT 、LISTENING、SYN_SENT、ESTABLISHED、LAST-ACK ...
  20. BIOS和Bootloader的对比

热门文章

  1. 微软宣布 S2C2F 已被 OpenSSF 采用
  2. DeprecationWarning: collection.ensureIndex is deprecated. Use createIndexes instead
  3. python多线程批量操作交换机
  4. C# 操作IIS加强版(添加,删除,启动,暂停网站,默认页,绑定信息)
  5. 《HTTP权威指南》– 4.HTTP连接管理
  6. CBV如何添加装饰器?
  7. 如何优化大场景实时渲染?HMS Core 3D Engine这么做
  8. Java的深拷贝和浅拷贝的区别
  9. [cocos2d-x]判断两个矩形是否有交叉区域
  10. 51NOD5213A 【提高组/高分-省选预科 第一场【M】】序列