JZOJ2020年8月11日提高组T2 宝石

题目

Description

见上帝动了恻隐之心,天后也想显示一下慈悲之怀,随即从口袋中取出一块魔术方巾,让身边的美神维纳斯拿到后堂的屏风上去试试,屏风是正方形的,高和宽方向上各划有m条鱼屏风的边平行的直线,平行直线间的距离为1厘米。这2m条直线共有m*m个交点,在某些交点上镶嵌着宝石。如果魔术方巾的边与屏风的边平行且魔术方巾触碰到屏风上镶嵌着的宝石,就将与这些宝石等值的金银送给人们。维纳斯想让魔术方巾触碰到的宝石的价值最多,可要在短短的1秒钟之内解决问题,也感到力不从心,你能帮帮她吗?

Input

输入文件gem.in的第一行有三个正整数m,n,k,数与数之间用一个空格分隔。其中m为屏风在高和宽方向上被划分出的直线数。魔术方巾为正方形的,它的边长为k厘米。N为屏风上宝石的个数。

接下来的n行,每行三个正整数,依次表示宝石所在直线的行号、列号、宝石的价值,数与数之间用一个空格分隔。

Output

输出文件gem.out只有一个正整数,为魔术方巾触碰到的宝石的最大价值总数。

Sample Input

10 4 4

1 1 9

2 3 5

6 2 12

4 5 6

Sample Output

23

Data Constraint

30%的数据,1≤m≤500,1≤n≤10000,1≤k≤100;

60%的数据,1≤m≤3000,1≤n≤10000,1≤k≤1000;

100%的数据,1≤m≤50000,1≤n≤50000,1≤k≤10000;

Hint

【输入样例2】

10 4 3

1 1 9

2 3 5

6 2 12

4 5 6

【输出样例2】

18

题解

题意

给出\(n\)个宝石,每个宝石都有一定的价值

可以放置一个\(k*k\)的矩阵

问如何放置使得价值最大

问最大价值

分析

将题目转换一下

有\(n\)个\(k*k\)的矩阵,每个矩阵都有一定的价值,问一个最大价值的重叠矩阵

容易想到扫描线

按照纵坐标排序

维护两个指针

一个是加入(\(i\)),一个是删除(\(j\))

那么当\(j\)的纵坐标+\(k\)小于\(i\)的纵坐标时,删掉\(j\)

可以用线段树来维护区间修改

然后每操作一次就用树顶来更新答案

Code

#include<cstdio>
#include<algorithm>
using namespace std;
struct node
{
int x,y,z,flag;
}a[50005];
int n,m,k,i,ans,tot,tree[200005],lazy[200005];
bool cmp(node x,node y)
{
return x.y<y.y;
}
void update(int x)
{
if (lazy[x]!=0)
{
lazy[x<<1]+=lazy[x];
lazy[x<<1|1]+=lazy[x];
tree[x<<1]+=lazy[x];
tree[x<<1|1]+=lazy[x];
lazy[x]=0;
}
}
void modify(int now,int l,int r,int p,int q,int x,int bj)
{
if (l>=p&&r<=q)
{
tree[now]+=x*bj;
lazy[now]+=x*bj;
return;
}
int mid=(l+r)>>1;
update(now);
if (p<=mid) modify(now<<1,l,mid,p,q,x,bj);
if (q>mid) modify(now<<1|1,mid+1,r,p,q,x,bj);
tree[now]=max(tree[now<<1],tree[now<<1|1]);
}
int main()
{
scanf("%d%d%d",&m,&n,&k);
for (i=1;i<=n;i++)
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
sort(a+1,a+n+1,cmp);
tot=1;
for (i=1;i<=n;i++)
{
modify(1,1,m,a[i].x,min(a[i].x+k,m),a[i].z,1);
while (a[i].y==a[i+1].y)
{
i++;
modify(1,1,m,a[i].x,min(a[i].x+k,m),a[i].z,1);
}
while (a[tot].y+k<a[i].y)
{
modify(1,1,m,a[tot].x,min(a[tot].x+k,m),a[tot].z,-1);
tot++;
}
ans=max(ans,tree[1]);
}
printf("%d\n",ans);
return 0;
}

JZOJ2020年8月11日提高组T2 宝石的更多相关文章

  1. JZOJ2020年8月11日提高组T4 景点中心

    JZOJ2020年8月11日提高组T4 景点中心 题目 Description 话说宁波市的中小学生在镇海中学参加计算机程序设计比赛,比赛之余,他们在镇海中学的各个景点参观.镇海中学共有n个景点,每个 ...

  2. JZOJ2020年8月11日提高组T3 页

    JZOJ2020年8月11日提高组T3 页 题目 Description 战神阿瑞斯听说2008年在中华大地上,将举行一届规模盛大的奥林匹克运动会,心中顿觉异常兴奋,他想让天马在广阔的天空上,举行一场 ...

  3. JZOJ2020年8月11日提高组T1 密码

    JZOJ2020年8月11日提高组T1 密码 题目 Description 在浩浩茫茫的苍穹深处,住着上帝和他的神仆们,他们闲谈着下界的凡人俗事,对人世间表现的聪明智慧,大加赞赏.今天他们正在观赏大地 ...

  4. JZOJ2020年8月11日提高组反思

    JZOJ2020年8月11日提高组反思 T1 看到题 啊这?! 我看错了吗??? 我理解错题了吗?? 好吧没有-- 高精度模板题,不用多说 T2 看到这种矩阵的问题 以为是前缀和搞事情 结果呢 扫描线 ...

  5. 【NOIP2015模拟11.4】JZOJ2020年8月6日提高组T2 最优交换

    [NOIP2015模拟11.4]JZOJ2020年8月6日提高组T2 最优交换 题目 题解 题意 有一个长度为\(n\)的正整数 最多可以进行\(k\)次操作 每次操作交换相邻两个位置上的数 问可以得 ...

  6. 【GDKOI2014】JZOJ2020年8月13日提高组T2 石油储备计划

    [GDKOI2014]JZOJ2020年8月13日提高组T2 石油储备计划 题目 Description Input Output 对于每组数据,输出一个整数,表示达到"平衡"状态 ...

  7. 【五校联考1day2】JZOJ2020年8月12日提高组T2 我想大声告诉你

    [五校联考1day2]JZOJ2020年8月12日提高组T2 我想大声告诉你 题目 Description 因为小Y 是知名的白富美,所以自然也有很多的追求者,这一天这些追求者打算进行一次游戏来踢出一 ...

  8. 【佛山市选2013】JZOJ2020年8月7日提高组T2 树环转换

    [佛山市选2013]JZOJ2020年8月7日提高组T2 树环转换 题目 描述 给定一棵N个节点的树,去掉这棵树的一条边需要消耗值1,为这个图的两个点加上一条边也需要消耗值1.树的节点编号从1开始.在 ...

  9. 【SHOI2008】JZOJ2020年9月5日提高组 循环的债务

    CSP-2020倒计时:36天 [SHOI2008]JZOJ2020年9月5日提高组 循环的债务 题目 Description Alice.Bob和Cynthia总是为他们之间混乱的债务而烦恼,终于有 ...

随机推荐

  1. iOS面试高薪,进阶 你会这些呢嘛?(持续更新中)

    这个栏目将持续更新--请iOS的小伙伴关注!做这个的初心是希望能巩固自己的基础知识,当然也希望能帮助更多的开发者! 基础>分析>总结 面试 iOS常见基础面试题(附参考答案) iOS底层原 ...

  2. Serilog源码解析——使用方法

    在上两篇文章(链接1和链接2)中,我们通过一个简易 demo 了解到了一个简单的日志记录类库所需要的功能,即一条日志有哪些数据,以及如何通过一次记录的方式将同一条日志消息记录到多个日志媒介中.在本文中 ...

  3. Prometheus安装配置

    一.什么是Prometheus? Prometheus受启发于Google的Brogmon监控系统(相似的Kubernetes是从Google的Brog系统演变而来),从2012年开始由前Google ...

  4. js 元素添加多个监听

    function addListener(element,e,fn){     if(element.addEventListener){         element.addEventListen ...

  5. c#连接mysql答题步骤

    引用mysql数据库 using MySql.Data.MySqlClient; 有一个mysql.dll文件 下面是实例化连接数据库 MySqlConnection Conn = new MySql ...

  6. [leetcode/lintcode 题解] 微软 面试题:实现 Trie(前缀树)

    实现一个 Trie,包含 ​insert​, ​search​, 和 ​startsWith​ 这三个方法.   在线评测地址:领扣题库官网     样例 1: 输入:    insert(" ...

  7. Innodb之全局共享内存

    参考链接: https://blog.csdn.net/miyatang/article/details/54881547 https://blog.csdn.net/wyzxg/article/de ...

  8. http服务器文件名大小写忽略

    问题 文件从windows里面放到nginx里面去的时候,文件在windows下面是大小写忽略,也就是不论大小写都可以匹配的,而到linux下面的时候,因为linux是区分大小写的,也就是会出现无法忽 ...

  9. Linux内核源码分析之set_arch (一)

    1. 概述 之前已经写了几篇Linux内核启动相关的文章,比如:<解压内核镜像><调用 start_kernel>都是用汇编语言写的,这些代码的作用仅仅是把内核镜像放置到特定的 ...

  10. [原题复现]2018护网杯(WEB)easy_tornado(模板注入)

    简介 原题复现:  考察知识点:模板注入  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 [护网杯 2018]eas ...