P3586 [POI2015] Logistyka

news/2025/1/13 21:31:10/文章来源:https://www.cnblogs.com/LG017/p/18669467

P3586 [POI2015] Logistyka

题目描述

维护一个长度为 \(n\) 的序列,一开始都是 \(0\),支持以下两种操作:

  1. U k a 将序列中第 \(k\) 个数修改为 \(a\)
  2. Z c s 在这个序列上,每次选出 \(c\) 个正数,并将它们都减去 \(1\),询问能否进行 \(s\) 次操作。

每次询问独立,即每次询问不会对序列进行修改。

【数据范围】

对于 \(100\%\) 的数据,\(1\leq n,m\leq 10^6\)\(1\leq k,c\leq n\)\(0\leq a\leq 10^9\)\(1\leq s\leq 10^9\)

比较有趣的思维题,我们翻译一下题面:
2. Z c s 在这个序列上,每次选出 \(c\) 个正数,并将它们都减去 \(1\),询问能否进行 \(s\) 次操作。

显然,对于一个数 \(a_i\) 它大于 \(s\) 的部分是不会产生贡献的,因为 \(a_i\) 最多被减去 \(s\)
然后我们思考一下用什么样的策略来减:

图片来源:BearBrine

我们只需要将每堆东西不断的往左边移动,直到前一堆的高度等于 \(s\) 为止。那么我们最后的判断条件就是我们能否得到 \(c\) 堆高为 \(s\) 的东西。其实等价于:

\[\sum_{i=1}^{n} min(a_{i},s) \ge s*c \]

所以我们用一个平衡树来维护这个东西,单点修改,查询时将平衡树按值域分裂为两部分。

对于 \([1,s]\) 它们对答案的贡献就是其总和,对于 \([s+1,inf]\) 其贡献为 \(cnt*s\)

然后这题就做完了

Code:

#include<bits/stdc++.h>
#define int long long
const int N=1e6+6;
using namespace std;
int n,m,cnt,rt;
int p[N];
//FHQ-Treap
struct Tree{int ls,rs,val,sum,siz,pri;
}t[N<<1];
int rd(){return rand()*rand()+rand()*17+1;}
int Node(int val){t[++cnt]={0,0,val,val,1,rd()};return cnt;}
void pushup(int x)
{t[x].siz=t[t[x].ls].siz+t[t[x].rs].siz+1;t[x].sum=t[t[x].ls].sum+t[t[x].rs].sum+t[x].val;}
void splite_val(int x,int &a,int &b,int k)
{if(!x){a=b=0;return ;}if(k>=t[x].val){a=x;splite_val(t[x].rs,t[x].rs,b,k);}if(k< t[x].val){b=x;splite_val(t[x].ls,a,t[x].ls,k);}pushup(x);//cout<<t[x].val<<" "<<k<<"="<<t[a].val<<" "<<t[b].val<<"\n";
}
void splite_siz(int x,int &a,int &b,int k)
{if(!x){a=b=0;return ;}int tmp=t[t[x].ls].siz+1;if(k>=tmp){a=x;splite_siz(t[x].rs,t[x].rs,b,k-tmp);}if(k< tmp){b=x;splite_siz(t[x].ls,a,t[x].ls,k);}pushup(x);
}
int merge(int x,int y)
{if(!x||!y)return x|y;if(t[x].pri< t[y].pri){t[x].rs=merge(t[x].rs,y);pushup(x);return x;}if(t[x].pri>=t[y].pri){t[y].ls=merge(x,t[y].ls);pushup(y);return y;}
}
char cc;
void work()
{ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n>>m;for(int i=1;i<=n;i++)p[i]=-1;int x,y,a,b,c;for(int i=1;i<=m;i++){cin>>cc;cin>>x>>y;if(cc=='U'){if(p[x]==-1){p[x]=y;splite_val(rt,a,b,p[x]);rt=merge(merge(a,Node(p[x])),b);}else{splite_val(rt,a,b,p[x]-1);splite_siz(b,b,c,1);rt=merge(a,c);p[x]=y;a=b=0;splite_val(rt,a,b,p[x]);rt=merge(merge(a,Node(p[x])),b);}}else{if(t[rt].siz<x||t[rt].sum<x*y){cout<<"NIE\n";continue;}splite_val(rt,a,b,y);int tmp=t[a].sum+t[b].siz*y;//cout<<t[a].sum<<" "<<t[b].siz<<" "<<y<<"="<<tmp<<"\n";cout<< (tmp>=x*y ? "TAK\n" : "NIE\n");rt=merge(a,b);}}
}
#undef int
int main()
{//freopen("Logistyka.in","r",stdin);freopen("Logistyka.out","w",stdout);work();return 0;
}

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

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

相关文章

Java编程规范-命名规范

命名风格 抽象类/异常类/测试类 抽象类命名使用 Abstract 或 Base 开头;异常类命名使用 Exception 结尾;测试类命名以它要测试的类的名称开始,以 Test 结尾。 数组 中括号是数组类型的一部分,数组定义如下:String[] args。 反例: 使用 String args[] 的方式来定义。 POJO…

go序列化库--msgpack

简介 msgpack是一个基于二进制高效的对象序列化类库,可用于跨语言通信。 它可以像JSON那样,在许多种语言之间交换结构对象。 但是它比JSON更快速也更轻巧。 支持Python、Ruby、Java、C/C++、Go等众多语言。 宣称比Google Protocol Buffers还要快4倍。官方的说法它像 JSON, 但…

图灵完备游戏介绍

怎么从软件到硬件 这个问题对于我来说很难理解。即使我本身是程序员,即使看了很多科普视频,但仍然不知道。硬件是不可变的,软件是多变的,怎么用不变实现变化? 我偶然间看了系统推荐的游戏视频,发现了这个游戏。于是就趁着无聊玩了下。这个游戏展现了怎么从硬件到软件。逻…

推荐4款基于.NET开源、功能强大的CMS建站系统

前言 CMS系统作为一种强大的内容管理工具,在数字化时代发挥着越来越重要的作用。无论是个人博客还是大型企业官网,选择一个合适的CMS都能极大地提高效率和用户体验。今天大姚给大家推荐4款基于.NET开源、免费、功能强大的CMS建站系统,希望可以帮助到有需要的同学。 SSCMS SS…

DVWA靶场CSP Bypass (漏洞绕过) 漏洞通关及源码审计

CSP Bypass CSP Bypass(Content Security Policy Bypass)漏洞涉及的是绕过网站部署的内容安全策略(Content Security Policy,CSP)限制,从而执行潜在的恶意操作。CSP 是一种安全机制,用于防止跨站脚本(XSS)、数据注入攻击等。其通过限制网页能够加载和执行的内容来源…

为你的Blazor程序加入本地化多语言功能

本地化 本地化是为给定语言和地区定制应用程序的过程. BootstrapBlazor 组件允许您将其 UI 元素转换为所需的语言。这包括按钮、过滤器操作符属性等文本。组件内部默认使用当前请求 UI 文化语言,本文将向您展示如何在应用程序中使用此功能: BootstrapBlazor 组件库 简介 Boot…

2024ICPC(香港)游记

转自MyBlog 虽然2025了再写好像有点迟就是了。 day -180? 大一xdx太nb导致的,本来预估网络赛400有两场,600校内出线,结果被xdx搞成网络赛200有两场,400校内出线。632遗憾退场。 day -100? 老师给南京站争取了一个外卡,可惜20分罚时之差给了我们前一队。这么说去年邀请赛…

AVL树的插入

关于AVL树的插入,其实是一个比较复杂的问题,主要是在于他对于“旋转”这一概念,对于这一概念其实我感觉很多博主讲的都不是很明白,包括CHATGPT,也试了,但是也没有比较清楚的解释,他们主要集中在一种比较简单的情况,即没有任何子树的情况,如下所示 ​​ 对于这种最基本…

【事件分析】20250112-Usual 赎回机制调整事件

背景信息 https://docs.usual.money/ Usual 是一个聚合 RWA 的稳定币发行协议,经济模型中存在三种代币:USD0:Usual 发行的稳定币。 USD0++:USD0++ 是 USD0 的质押版本,为期4年,可获得 USUAL 代币奖励。 USUAL:Usual 协议的治理代币。事发缘由 https://usual.money/blog/…

痞子衡嵌入式:我评上了2024年度电子星球(eestar)最强大脑

今天收到了「电源网旗下电子星球」 颁发的 2024 年度最强大脑奖牌,这是电子星球第二年给痞子衡颁奖了。这个奖牌设计得非常用心,区别于去年奖牌只能捧在手上,今年痞子衡可以把奖牌挂脖子上出去拉风了。从23年8月开始,电子星球小编每个工作日会转发一篇痞子衡的技术原创文章…

React源码解析(1): JSX语法与react项目渲染过程

好家伙0.前言 由于工作的需要,我不得不入手了react的全家桶,曾经我的主要技术栈是vue。 从vue转到react,一开始我感到非常不适应,jsx的语法的不了解,react hooks的使用方式,react路由的配置。。。这一度让我十分难受 但在熟悉一段时间后,我逐渐领略到react的魅力,灵活的…

痞子衡嵌入式:我拿到了2024年度电子星球(eestar)最强大脑

今天收到了「电源网旗下电子星球」 颁发的 2024 年度最强大脑奖牌,这是电子星球第二年给痞子衡颁奖了。这个奖牌设计得非常用心,区别于去年奖牌只能捧在手上,今年痞子衡可以把奖牌挂脖子上出去拉风了。从23年8月开始,电子星球小编每个工作日会转发一篇痞子衡的技术原创文章…