YbtOJ#20066-[NOIP2020模拟赛B组Day4]筹备计划【线段树,树状数组】

正题

题目链接:http://noip.ybtoj.com.cn/contest/90/problem/4


题目大意

一个集合[1,n]∈S[1,n]\in S[1,n]S,和一个序列aaa。有操作

  1. 序列aaa的一个数加上xxx
  2. 序列aaa的一个数减去xxx
  3. [l,r][l,r][l,r]加入集合SSS
  4. [l,r][l,r][l,r]删除出集合SSS

每次修改后求一个k∈Sk\in SkS使得∑i=1∣i−k∣ai\sum_{i=1}|i-k|a_ii=1ikai最小


解题思路

如果不考虑集合SSS来选数那么一定是选序列aia_iai的带权中位数(((即有aia_iaiiii)))

那么考虑上集合SSS一定是选择离SSS近的,我们直接找到左右两边最近的值然后用树状数组判断答案大小即可。

时间复杂度O(nlog⁡n)O(n\log n)O(nlogn)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define lowbit(x) (x&-x)
#define ll long long
using namespace std;
const ll N=2e5+10;
ll n,q; 
struct Seq_Tree{ll s[N*4],lazy[N*4],w[N*4];void Downdata(ll x,ll l,ll mid,ll r){if(!lazy[x])return;lazy[x*2]=lazy[x*2+1]=lazy[x];lazy[x]--;s[x*2]=(mid-l+1)*lazy[x];s[x*2+1]=(r-mid)*lazy[x];lazy[x]=0;return;}void Cover(ll x,ll L,ll R,ll l,ll r,ll val){if(L==l&&R==r){s[x]=(R-L+1)*val;lazy[x]=val+1;return;}ll mid=(L+R)>>1;Downdata(x,L,mid,R);if(r<=mid)Cover(x*2,L,mid,l,r,val);else if(l>mid)Cover(x*2+1,mid+1,R,l,r,val);else Cover(x*2,L,mid,l,mid,val),Cover(x*2+1,mid+1,R,mid+1,r,val);s[x]=s[x*2]+s[x*2+1];w[x]=w[x*2]+w[x*2+1];return;}void Change(ll x,ll L,ll R,ll pos,ll val){if(L==R){w[x]+=val;return;}ll mid=(L+R)>>1;Downdata(x,L,mid,R);if(pos<=mid)Change(x*2,L,mid,pos,val);else Change(x*2+1,mid+1,R,pos,val);s[x]=s[x*2]+s[x*2+1];w[x]=w[x*2]+w[x*2+1];}ll Find(ll x,ll L,ll R,ll k){if(L==R)return s[x];ll mid=(L+R)>>1;Downdata(x,L,mid,R);if(w[x*2]>=k)return Find(x*2,L,mid,k);return s[x*2]+Find(x*2+1,mid+1,R,k-w[x*2]);}ll Ask(ll x,ll L,ll R,ll k){if(L==R)return L;ll mid=(L+R)>>1;Downdata(x,L,mid,R);if(s[x*2]>=k)return Ask(x*2,L,mid,k);return Ask(x*2+1,mid+1,R,k-s[x*2]);}
}T;
struct BIT{ll t[N],w[N];void Change(ll x,ll val){ll k=n-x+1;while(x<=n){t[x]+=val*k;w[x]+=val;x+=lowbit(x); }return;}ll Ask(ll x){ll ans=0,k=n-x+1;while(x){ans+=t[x]-w[x]*k;x-=lowbit(x);}return ans;}
}Tl,Tr;
ll check(ll x)
{return Tl.Ask(x)+Tr.Ask(n-x+1);}
void updata(ll x,ll w){Tl.Change(x,w);Tr.Change(n-x+1,w);return;
}
int main()
{freopen("position.in","r",stdin);freopen("position.out","w",stdout);scanf("%lld%lld",&n,&q);for(ll i=1;i<=n;i++){ll x;scanf("%lld",&x);T.Change(1,0,n+1,i,x);Tl.Change(i,x);Tr.Change(n-i+1,x);}T.Cover(1,0,n+1,0,n+1,1);while(q--){ll op,x,y;scanf("%lld%lld%lld",&op,&x,&y);if(op==1)T.Change(1,0,n+1,x,y),updata(x,y); if(op==2)T.Change(1,0,n+1,x,-y),updata(x,-y);if(op==3)T.Cover(1,0,n+1,x,y,1);if(op==4)T.Cover(1,0,n+1,x,y,0);ll k=T.Find(1,0,n+1,(T.w[1]+1)/2);x=T.Ask(1,0,n+1,k);y=T.Ask(1,0,n+1,k+1);if(!x&&y==n+1)printf("-1\n");else if(!x)printf("%lld\n",y);else if(y==n+1)printf("%lld\n",x);else if(check(x)<=check(y))printf("%lld\n",x);else printf("%lld\n",y);}
}

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

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

相关文章

【模拟】Biotech

Biotech 题目大意&#xff1a; 有一堆细胞&#xff08;放电或不放电&#xff09;&#xff0c;当周围细胞放电个数小于2或大于3时&#xff08;八个方向&#xff09;&#xff0c;此细胞变为不放电&#xff0c;当周围细胞放电个数为2时&#xff0c;此细胞不变&#xff0c;当周围…

.NET Core微服务之服务间的调用方式(REST and RPC)

一、REST or RPC ?1.1 REST & RPC微服务之间的接口调用通常包含两个部分&#xff0c;序列化和通信协议。常见的序列化协议包括json、xml、hession、protobuf、thrift、text、bytes等&#xff1b;通信比较流行的是http、soap、websockect&#xff0c;RPC通常基于TCP实现&am…

【记忆化搜索】【dfs】【递归】Chocolate

Chocolate 题目大意&#xff1a; 有一块巧克力&#xff08;每一个单位有一定的美味值&#xff09;&#xff0c;判断是否可以把他分为k块美味值相等的小巧克力 原题&#xff1a; 题目描述 Charlie 有一块巧克力。 这块巧克力是矩形的&#xff0c;有 n 行 m 列一共 n m 个大…

YbtOJ#20063-[NOIP2020模拟赛B组Day4]古老谜题【统计】

正题 题目链接:http://noip.ybtoj.com.cn/contest/90/problem/1 题目大意 给出一个010101序列&#xff0c;求有多少对(l,p,r)(l,p,r)(l,p,r)使得l<p<rl<p<rl<p<r且sp1s_p1sp​1且s(l,p)s(p,r)s(l,p)s(p,r)s(l,p)s(p,r)&#xff08;s(l,r)s(l,r)s(l,r)表示l…

Nuget 多平台多目标快速自动打包

构建现代的 .Net 应用离不开 Nuget 的支持&#xff0c;而快速打包 Nuget 成了提高生产率的有效方法。1. 前置条件为了实现 Nuget 的快速打包&#xff0c;我们需要先解决一些前置依赖&#xff0c;无论是 .Net Framework、Mono 或者 .Net Standard&#xff08;.Net Core&#xff…

P4495-[HAOI2018]奇怪的背包【数论,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P4495 题目大意 nnn个物品大小为viv_ivi​&#xff0c;每个物品有无数个&#xff0c;背包的重量定义为大小和%P\%P%P。 qqq次询问&#xff0c;问一个www表示有多少种取法使得背包重量为www&#xff08;两种方案不同仅当有一种…

初一模拟赛(5.4)

成绩&#xff1a; 注&#xff1a;rank是有算其他dalaodalaodalao的 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4222lyflyflyf250250250100100100100100100303030202020333fyfyfy240240240100100100100100100404040000444tjhtjhtjh230230230100100100100…

Identity Server 4 - Hybrid Flow - 使用ABAC保护MVC客户端和API资源

这个系列文章介绍的是Identity Server 4 实施 OpenID Connect 的 Hybrid Flow. 保护MVC客户端: Identity Server 4 - Hybrid Flow - MVC客户端身份验证, Identity Server 4 - Hybrid Flow - Claims保护API资源(这里用到了RBAC: Role-based Access Control 基于角色的访问权限控…

P3599-Koishi Loves Construction【构造,数论】

正题 题目链接:https://www.luogu.com.cn/problem/P3599 题目大意 构造一个nnn的排列&#xff0c;要求满足其中一个给定的要求 对于每个前缀和在模nnn意义下不同对于每个前缀积在模nnn意义下不同 解题思路 对于加法&#xff0c;显然nnn要填在第一位&#xff0c;那么这一位的…

【图论】【并查集】矩形(ssl 1222)

矩形 ssl 1222 题目大意&#xff1a; 有n个矩阵&#xff0c;现在将有重叠部分的两个矩阵合并成一个图形&#xff0c;问有多少个图形 原题&#xff1a; 题目描述 在一个平面上有n个矩形。每个矩形的边都平行于坐标轴并且都具有值为整数的顶点。我们用如下的方式来定义块。…

Asp.Net Core Web Api图片上传及MongoDB存储实例教程(一)

图片或者文件上传相信大家在开发中应该都会用到吧&#xff0c;有的时候还要对图片生成缩略图。那么如何在Asp.Net Core Web Api实现图片上传存储以及生成缩略图呢&#xff1f;今天我就使用MongoDB作为图片存储&#xff0c;然后使用SixLabors作为图片处理&#xff0c;通过一个As…

FFT算法学习笔记

写在前边 1.辣鸡RRRR_wys之前csdn的博客&#xff0c;千年不更。。。还很水。。。于是开了这个Blog。。。妄图拯救一下自己 2.最近接触了一些多项式理论。于是翘掉了愉快的高频自控&#xff0c;通过《算导》稍稍学习了一下 3.算法竞赛中&#xff0c;FFT主要解决多项式的乘法等问…

YbtOJ#20060-[NOIP2020模拟赛B组Day3]字串修改【模拟】

正题 题目链接:http://noip.ybtoj.com.cn/contest/86/problem/2 题目大意 给两个字符串&#xff0c;第一个中的∗*∗号可以替换为若干个&#xff08;可以为0个&#xff09;相同的它的前一个字符。求能否构成第二个字符串。 解题思路 把所有的∗*∗号去掉然后在有的∗*∗号的…

【并查集】家谱(luogu 2814/ssl 2343)

家谱 luogu 2814 ssl 2343 题目大意&#xff1a; 给一堆父子关系&#xff0c;求出一些人的最大的祖先 原题&#xff1a; 题目背景 现代的人对于本家族血统越来越感兴趣。 题目描述 给出充足的父子关系&#xff0c;请你编写程序找到某个人的最早的祖先。 输入输出格式…

System.IO.Pipelines: .NET高性能IO

本文翻译自dotnet团队博客文章&#xff1a;https://blogs.msdn.microsoft.com/dotnet/2018/07/09/system-io-pipelines-high-performance-io-in-net/ System.IO.Pipelines是一个新的库&#xff0c;旨在简化在.NET中执行高性能IO的过程。它是一个依赖.NET Standard的库&#xff…

Full_of_Boys训练1总结

题目来源&#xff1a; 2017-2018 ACM-ICPC Northern Eurasia (Northeastern European Regional) Contest (NEERC 17) A. Archery Tournament 每次查询&#xff0c;找这个位置前面的15个圆&#xff0c;后边15个圆来更新答案。set维护一下圆就行。为什么对&#xff0c;官方题解&a…

CF311B-Cats Transport【斜率优化dp】

正题 题目链接:https://www.luogu.com.cn/problem/CF311B 题目大意 nnn座山在一条线上&#xff0c;有mmm只猫&#xff0c;第iii只从tit_iti​开始在第xix_ixi​座山上游玩结束。 派ppp个人在不同时间从111走到nnn接走所有游玩结束的猫&#xff0c;求所有猫的最小等待时间。 解…

【并查集】黑魔法师之门(codevs 1995/joyoi-codevs 1995)

黑魔法师之门 codevs 1995 joyoi-codevs 1995 题目大意&#xff1a; 有一堆点&#xff0c;每一次操作添加一条边&#xff0c;并要输出每个点的度数都大于1并为偶数的子图的个数 原题&#xff1a; 题目描述 经过了16个工作日的紧张忙碌&#xff0c;未来的人类终于收集到了…

.NET+PostgreSQL实践与避坑指南

简介.NETPostgreSQL(简称PG)这个组合我已经用了蛮长的一段时间&#xff0c;感觉还是挺不错的。不过大多数人说起.NET平台&#xff0c;还是会想起跟它“原汁原味”配套的Microsoft SQL Server(简称MSSQL)&#xff0c;其实没有MSSQL也没有任何问题&#xff0c;甚至没有Windows Se…

Full_of_Boys训练2总结

题目来源:&#xff1a;西安电子科技大学第16届程序设计竞赛网络同步赛 A, B, C: easy problem D. 另一个另一个简单题 做法是加起来&#xff0c;除n。希望会推导的聚聚指点。 #include <bits/stdc.h> const int inf 0x3f3f3f3f; using namespace std; int T; int ans; in…