Joy of Handcraft Gym - 102822J(线段树或差分)

Joy of Handcraft Gym - 102822J

题意:

每个灯有亮的周期和亮度,问1~m这段时间灯光最亮是多少

题解:

线段树维护区间最大值
根据灯的周期向这段区间加亮度k,然后利用线段树维护区间最大值
但是这样会超时,加个小优化就ac了(670ms)
我们考虑,因为题目只要求最亮的一段,而且所有灯亮的时间起点是一样的,也就是如果两个灯周期一样,只有亮度高的才会有用,所有我们将所有灯按照亮度排序,每加完一组灯,记录该周期,后面再出现该周期的就不用加了。因此所有的区间数量为Σi->n(m/ti)= mlogn

代码:

#include<bits/stdc++.h>
#define debug(a,b) printf("%s = %d\n",a,b);
typedef long long ll;
using namespace std;inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w;
}
const int maxn=1e5+9;
struct node{int time,light;
}a[maxn];
struct tree{int l,r;int lazy;int sum;
}tr[maxn<<2];
bool cmp(node a,node b){return a.light>b.light;
}
void solve(int rt,int val){tr[rt].sum=max(tr[rt].sum,val);tr[rt].lazy=max(tr[rt].lazy,val);
} 
void pushdown(int rt){solve(rt<<1,tr[rt].lazy);solve(rt<<1|1,tr[rt].lazy);tr[rt].lazy=0;
}
void pushup(int rt){tr[rt].sum=max(tr[rt<<1].sum,tr[rt<<1|1].sum);
}
void build(int rt,int l,int r){tr[rt].l=l;tr[rt].r=r;if(l==r){tr[rt].lazy=0;tr[rt].sum=0;return ;}int mid=l+r>>1;build(rt<<1,l,mid);build(rt<<1|1,mid+1,r);pushup(rt);
}
void update(int rt,int l,int r,int k){if(tr[rt].l>r||tr[rt].r<l)return ;if(tr[rt].l>=l&&tr[rt].r<=r){solve(rt,k);return ;}if(tr[rt].lazy)pushdown(rt);update(rt<<1,l,r,k);update(rt<<1|1,l,r,k);pushup(rt);
}
int query(int rt,int l,int r){if(tr[rt].l>r||tr[rt].r<l)return 0;if(tr[rt].l>=l&&tr[rt].r<=r){return tr[rt].sum;}pushdown(rt);return max(query(rt<<1,l,r),query(rt<<1|1,l,r));
}
int vis[maxn];
int main()
{int t;cin>>t;int cas=0;while(t--){int n,m;cin>>n>>m;memset(tr,0,sizeof(tr));memset(vis,0,sizeof(vis));build(1,1,m);for(int i=1;i<=n;i++){scanf("%d%d",&a[i].time,&a[i].light);}sort(a+1,a+1+n,cmp);for(int i=1;i<=n;i++){if(vis[a[i].time])continue;vis[a[i].time]=1;for(int j=0;j!=-1;j++){int l=2*j*a[i].time+1,r=2*j*a[i].time+a[i].time;//	printf("l=%d r=%d\n",l,r);if(l>m)break;if(r>m)update(1,l,m,a[i].light);else update(1,l,r,a[i].light);}}printf("Case #%d:",++cas);for(int i=1;i<=m;i++){printf(" %d",query(1,i,i));}printf("\n");}return 0;
}

方法二 差分

整体思路,我们对所有灯按照灯光从小到达排序,然后利用差分思想来存灯光,add来存这个灯光的开始时刻,del来存结束时刻
如图,红色表示开始时刻,蓝色为删除,红色到蓝色(不含蓝色)这一段均为该灯亮的时刻,从蓝色开始熄灭
在这里插入图片描述
这样存得到add和del,再查询答案时,对于每一时刻,加入当前的灯光开始时刻的灯光亮度,然后删除此刻del中记录的灯光,利用差分来维护
复杂度是(Ologlogm)
时间:904ms
(注意我们对灯光是排过序的,所以输出是ans的尾)

差分代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<set>using namespace std;const int MAXN = 4e5+5;struct bub {int t, x;
}b[MAXN];bool cmp(bub a, bub b) {return a.x>b.x;
}bool vis[MAXN];
vector<int> add[MAXN], del[MAXN];
multiset<int> ans;void init(int n) {for(int i=0;i<=n;++i) {	add[i].clear();del[i].clear();}memset(vis, 0, sizeof(vis));ans.clear();
}int main() {int T; scanf("%d", &T);for(int kase =1;kase<=T;++kase) {int n, m; scanf("%d%d", &n, &m);init(m);for(int i=0;i<n;++i) {	scanf("%d%d", &b[i].t, &b[i].x);}sort(b, b+n, cmp);for(int i=0;i<n;++i) {if(vis[b[i].t]) continue;vis[b[i].t]=true;for(int j=0;j<=m/b[i].t+1;j+=2) {add[j*b[i].t+1].push_back(b[i].x);del[(j+1)*b[i].t+1].push_back(b[i].x);}}printf("Case #%d:", kase);for(int i=1;i<=m;++i) {for(const auto &x: add[i]) {ans.insert(x);}for(const auto &y: del[i]) {//ans.erase(y)是删去集合内所有的元素yans.erase(ans.find(y));}if(!ans.empty()) printf(" %d", *ans.rbegin());else printf(" 0");}	printf("\n");		}return 0;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET Core 使用 HttpClient SSL 请求出错的解决办法

问题使用 HTTP Client 请求 HTTPS 的 API 时出现 The certificate cannot be verified up to a trusted certification authority 异常&#xff0c;并且证书已经传入。下面就是问题代码&#xff1a;public class Program{public static void Main(string[] args){var url &quo…

微软4年后重登市值第一,纳德拉如何做到的?

他用4年多时间将微软的市值提高了5000亿美元&#xff0c;超越苹果再次成为全球市值最高的上市公司。译 | 达达萨提亚纳德拉&#xff08;Satya Nadella&#xff09;2014年刚刚执掌微软时&#xff0c;微软当时是一个日渐没落的帝国。但在他领导的4年多时间里&#xff0c;微软百花…

【.NET Core项目实战-统一认证平台】第十五章 网关篇-使用二级缓存提升性能

首先说声抱歉&#xff0c;可能是因为假期综合症&#xff08;其实就是因为懒哈&#xff09;的原因&#xff0c;已经很长时间没更新博客了&#xff0c;现在也调整的差不多了&#xff0c;准备还是以每周1-2篇的进度来更新博客&#xff0c;并完成本项目所有功能。言归正传&#xff…

NET Core微服务之路:简单谈谈对ELK,Splunk,Exceptionless统一日志收集中心的心得体会...

前言日志&#xff0c;一直以来都是开发人员和运维人员最关心的问题。开发人员可通过日志记录来协助问题定位&#xff0c;运维人员可通过日志发现系统隐患&#xff0c;故障等定位问题。如果你的系统中没有日志&#xff0c;就像一个断了线的风筝&#xff0c;你永远不知道它会的落…

.NET Core 中的 Generic Host快速使用指南

本文以自己在工作中学习和使用.net core generic-host 作一个总结。前言在创建的ASPNETCORE项目中&#xff0c;我们可以在Main()中看见&#xff0c;我们通过IWebHostBuild创建了一个IWebHost&#xff0c;而微软提供了WebHost.CreateDefaultBuilder(args)来帮助我们更轻松得创建…

微软一顿操作猛如虎,PowerShell 排名直线上升

近日&#xff0c;TIOBE 发布了 2019 年 3 月编程语言排行榜&#xff0c;PowerShell 首次进入到了榜单的 Top 50 中&#xff0c;排在第 45 位。PowerShell 是运行在 Windows 操作系统上实现对系统以及应用程序进行管理自动化的命令行脚本环境。&#xff08;PowerShell 排在了 TI…

AcWing 201. 可见的点

AcWing 201. 可见的点 题意&#xff1a; 题解&#xff1a; 我们先说结论:坐标(i,j)&#xff0c;如果i和j互质&#xff0c;说明该坐标为可见 为什么&#xff1f; 我们想想什么样的坐标可见&#xff0c;什么样的会被挡住。光线是一个直线&#xff0c;在同一个直线上的点会被第一…

ocelot 自定义认证和授权

Intro最近又重新启动了网关项目&#xff0c;服务越来越多&#xff0c;每个服务都有一个地址&#xff0c;这无论是对于前端还是后端开发调试都是比较麻烦的&#xff0c;前端需要定义很多 baseUrl&#xff0c;而后端需要没有代码调试的时候需要对每个服务的地址都收藏着或者记在哪…

CF765F Souvenirs(势能线段树)

CF765F Souvenirsproblemsolutioncodeproblem 题目链接 solution 这个势能线段树简直是太巧妙了&#xff01;&#xff01;&#xff01;( ఠൠఠ )&#xff89; 将询问按右端点升序离线下来。 对于每一个右端点 rrr&#xff0c;维护 ansimin⁡{∣ai−aj∣,j∈[i,r]}ans_i\m…

AcWing 220. 最大公约数

AcWing 220. 最大公约数 题意&#xff1a; 题解&#xff1a; 题目就变成了AcWing 201. 可见的点 当然有微调&#xff0c;因为可见的点里面是从0开始&#xff0c;本题从1开始&#xff0c;所以本题中phi[1]认为是0 AcWing 201. 可见的点的题解 代码&#xff1a; #include<b…

欧拉函数(简单介绍+例题)

Acwing视频讲解 欧拉函数&#xff1a;正整数n&#xff0c;欧拉函数是小于n的正整数中与n互质的数的数目 Np1a1 * p1a2 * p1a3 * …* p1ak 如果pj是i的最小质因子 红色区域一样 经推导得&#xff1a;phi[i * pj] phi[i] * pj 如果pj不是i的最小质因子 经推导&#xff1a;phi[…

程序员过关斩将--你的面向接口编程一定对吗?

菜菜哥&#xff0c;出大事啦怎么了&#xff0c;你和男票分手了&#xff1f;很正常&#xff0c;谁让你男票是产经经理呢不是啦&#xff0c;是我做的一个小游戏&#xff0c;需求又变了&#xff0c;程序我快改不动了说来让我欢乐一下&#xff1f;菜菜哥&#xff0c;咱两还能不能好…

Codeforces:779(div2)

前言 solve 4 rnk247 占了罚时的便宜。 CF不占罚时便宜就会被罚时占便宜 感觉这场似乎都是性质题&#xff0c;一眼看出性质就秒了&#xff0c;看不出就很难做出来了。 C似乎卡了很多人。但我做起来还好。 D2做不出来有些懊恼。 E是妙题。 题目 A 水题&#xff0c;保证male…

我们为什么要搞长沙.NET技术社区(4)

我们为什么要搞长沙.NET技术社区&#xff08;4&#xff09;邹溪源&#xff0c;2019年3月7日Ps:文中的.NET 包括且不限定于传统.NET Framework技术和.NET Core技术。1. 楔子昨天&#xff08;2019年3月6日&#xff09;晚餐时间&#xff0c;有幸得到长沙技术圈资深.NET开发者出生…

P1290 欧几里德的游戏

P1290 欧几里德的游戏 题意&#xff1a; 给定两个正整数 M 和 N&#xff0c;从 Stan 开始&#xff0c;从其中较大的一个数&#xff0c;减去较小的数的正整数倍&#xff0c;当然&#xff0c;得到的数不能小于 0。然后是 Ollie进行同样的操作&#xff0c;直到一个人得到0&#…

C#机器学习之判断日报是否合格

原文作者&#xff1a;心莱科技肖鑫简单来说机器学习的核心步骤在于“获取学习数据&#xff1b;选择机器算法&#xff1b;定型模型&#xff1b;评估模型&#xff0c;预测模型结果”&#xff0c;下面本人就以判断日报内容是否合格为例为大家简单的阐述一下C#的机器学习。第一步&a…

SignalR2结合ujtopo实现拓扑图动态变化

上一篇文章基于jTopo的拓扑图设计工具库ujtopo&#xff0c;介绍了拓扑设计工具&#xff0c;这一篇我们使用SignalR2结合ujtopo实现拓扑图的动态变化。仅仅作为演示&#xff0c;之前的文章SignalR2简易数据看板演示&#xff0c;用一个小的示例演示了SignalR作为数据看板的用法&a…

Ocelot 入门Demo系列(01-Ocelot极简单Demo及负载均衡的配置)

来源&#xff1a;https://www.cnblogs.com/7tiny/p/10493805.html【前言】Ocelot是一个用.NET Core实现并且开源的API网关&#xff0c;它功能强大&#xff0c;包括了&#xff1a;路由、请求聚合、服务发现、认证、鉴权、限流熔断、并内置了负载均衡器与Service Fabric、Butterf…

博弈论(基础概念+例题)

博弈论(b站视频) 文章目录一些概念以Nim游戏为例Nim游戏介绍定义 必败/必胜局面必败/必胜局面的判定引理Nim游戏判定引理的等价命题有向图游戏对判定引理的数学描述-Sg函数有向图游戏的和题目&#xff1a;[有向图游戏][有向图游戏的和][构造/转化类]一些概念 以Nim游戏为例 Ni…

.NET Core 3.0 linux 部署小贴士

dotnet core 3.0 目前还是测试版&#xff0c;在linux下安装 sdk 需要有一些注意事项1.下载urlhttps://dotnet.microsoft.com/download/thank-you/dotnet-sdk-3.0.100-preview-009812-linux-x64-binaries2.安装指令mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-3.0.100…