Codeforces 85D. Sum of Medians (线段树)

别再手动画柜子了!用EPLAN导入STEP模型,5分钟搞定一个标准机柜 本文详细介绍了如何利用EPLAN Pro Panel的3D布局功能,快速将STEP模型转化为智能机柜宏,大幅提升电气工程设计效率。通过实战步骤解析,包括模型导入、智能解析、安装面定义及拼柜技巧,帮助工程师5分钟内完成标准机柜设计,避免传统手动建模的尺寸偏差问题。 阅读详情

题意:

        三种操作,1.加入一个数,2,删除一个数,3,询问经过排序以后,所有下标mod5mod5余3的数的和

思路:

        注意到,当我们加入一个数以后,会让所有后面的数后移一位,删除会使得后面全部前移一位,每次移动都使得下标变化1,所以我们用线段树维护5个值,分别是当前区间下标余数为0,1,2,3,4的值的和,每次加入或删除树,我们只需要把后面的这五个数变换即可(例如我们加入一个树,后面的坐标全部加一,所以原本余数为1的值变成原本余数为0的值)
        总结一下,首先读入所有操作,离散出所有数字,每次操作都将后面的数字移动一位,利用lazy节省时间,利用数值交换实现下标的移动

错误及反思:

代码:

#include<bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
const int N = 100100;
long long segtree[N<<2][5];
int lazy[N<<2];
int num[N<<2];
vector<int> id;
int n;
int getid(int x){return lower_bound(id.begin(),id.end(),x)-id.begin()+1;}
struct ope{
    char t[10];
    int x;
}op[N];


void pushup(int rt){
    segtree[rt][0]=segtree[rt<<1][0]+segtree[rt<<1|1][0];
    segtree[rt][1]=segtree[rt<<1][1]+segtree[rt<<1|1][1];
    segtree[rt][2]=segtree[rt<<1][2]+segtree[rt<<1|1][2];
    segtree[rt][3]=segtree[rt<<1][3]+segtree[rt<<1|1][3];
    segtree[rt][4]=segtree[rt<<1][4]+segtree[rt<<1|1][4];
}

void pushdown(int rt){
    if(lazy[rt]!=0){
        lazy[rt<<1]+=lazy[rt]; lazy[rt<<1]%=5;
        lazy[rt<<1|1]+=lazy[rt]; lazy[rt<<1|1]%=5;
        while(lazy[rt]){
            swap(segtree[rt<<1][0],segtree[rt<<1][1]); swap(segtree[rt<<1][0],segtree[rt<<1][2]);
            swap(segtree[rt<<1][0],segtree[rt<<1][3]); swap(segtree[rt<<1][0],segtree[rt<<1][4]);

            swap(segtree[rt<<1|1][0],segtree[rt<<1|1][1]); swap(segtree[rt<<1|1][0],segtree[rt<<1|1][2]);
            swap(segtree[rt<<1|1][0],segtree[rt<<1|1][3]); swap(segtree[rt<<1|1][0],segtree[rt<<1|1][4]);
            lazy[rt]--;
        }
    }
}

void change(int x,int v,int l,int r,int rt){
    if(l==r){
        num[rt]+=v;
        return ;
    }
    int m=l+r>>1;
    if(x<=m) change(x,v,lson);
    else change(x,v,rson);
    num[rt]=num[rt<<1]+num[rt<<1|1];
}

int getnum(int L,int R,int l,int r,int rt){
    if(L<=l&&R>=r) return num[rt];
    int m=l+r>>1,ans=0;
    if(L<=m) ans+=getnum(L,R,lson);
    if(R>m) ans+=getnum(L,R,rson);
    return ans;
}

void update(int x,int op,int num,int l,int r,int rt){
    if(l==r){
        if(op==1)
            segtree[rt][(num+1)%5]+=op*id[l-1];
        else segtree[rt][(num)%5]+=op*id[l-1];
        return ;
    }
    pushdown(rt);
    int m=l+r>>1;
    if(m>=x){
        update(x,op,num,lson);
        if(op==1){
            lazy[rt<<1|1]++; lazy[rt<<1|1]%=5;
            swap(segtree[rt<<1|1][0],segtree[rt<<1|1][1]); swap(segtree[rt<<1|1][0],segtree[rt<<1|1][2]);
            swap(segtree[rt<<1|1][0],segtree[rt<<1|1][3]); swap(segtree[rt<<1|1][0],segtree[rt<<1|1][4]);
        }
        else{
            lazy[rt<<1|1]+=4; lazy[rt<<1|1]%=5;
            swap(segtree[rt<<1|1][0],segtree[rt<<1|1][4]); swap(segtree[rt<<1|1][0],segtree[rt<<1|1][3]);
            swap(segtree[rt<<1|1][0],segtree[rt<<1|1][2]); swap(segtree[rt<<1|1][0],segtree[rt<<1|1][1]);
        }

    }
    else update(x,op,num,rson);
    pushup(rt);
    return ;
}

int main(){
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%s",op[i].t);
        if(op[i].t[0]=='a'||op[i].t[0]=='d'){
            scanf("%d",&op[i].x);
            id.push_back(op[i].x);
        }
    }
    sort(id.begin(),id.end()),id.erase(unique(id.begin(),id.end()),id.end());
    for(int i=0;i<n;i++){
        if(op[i].t[0]=='s')
            printf("%lld\n",segtree[1][3]);
        else if(op[i].t[0]=='a'){
            int x=getid(op[i].x);
            update(x,1,getnum(1,x,1,id.size(),1),1,id.size(),1);
            change(x,1,1,id.size(),1);
        }
        else{
            int x=getid(op[i].x);
            update(x,-1,getnum(1,x,1,id.size(),1),1,id.size(),1);
            change(x,-1,1,id.size(),1);
        }
    }
}
Cesium+Vue3教程(003):基于Vue3的Cesium自定义地图和地图叠加 在 Cesium 中,是用于加载地表影像图层的核心接口。通过它,您可以将各种地图服务(如卫星影像、街道地图、自定义瓦片等)加载到 Cesium 的地球上。Cesium 提供了多个内置的。 阅读详情

相关推荐

《AFSim 2.9中文参考手册》

本栏目将对《AFSim 2.9中文参考手册》进行持续更新,欢迎关注交流!对本文或者AFSIM相关内容感兴趣的朋友,可私心联系作者。《AFSim 2.9中文参考手册》内容概览。

henggesim的博客 1万+

Codeforces 85D Sum of Medians(线段树)

题目链接:D. Sum of Medians 题意:给定一个空数组,每次进行以下操作 1.增加一个[1,10^9]内的数(该数保证不在数组中) 2.删除一个[1,10^9]内的数(该数保证在数组中) 3.求数组排序后数组内下标对5取余等于3的元素和 题解:将下标离散化,我们可以用线段树维护区间内数的个数,以及下标对5取余后对应0-4的元素的和,每次询问时答案就是t[rt][1]=v;,修改也很简单,注意在合并部分,合并时,右区间内对5取余后的下标在合并后变为(左区间个数+i)%5,左区间内保持不变

m0_56280274的博客 383

OpenCV图像去畸变实战指南:从原理到参数调优(附完整代码与效果对比)

本文深入解析了OpenCV图像去畸变的原理与实战技巧,详细对比了标准透视、鱼眼及全能型omnidir三种校正函数的核心参数调优方法。通过分析alpha、balance、centerX/Y及focalScale四大参数对输出效果的影响,并结合完整代码与效果对比图,帮助开发者精准校正镜头畸变,提升计算机视觉任务精度。

weixin_29046611的博客 341

codeforces Sum of Medians -- 线段树

D. Sum of Medians 有三种类型的操作 (1)“add x”,表示往集合里添加数x。 (2)“del x”,表示将集合中数x删除。 (3)“sum”,求出从小到大排列的集合中下标模5为3的数的和。 集合中的数都是唯一的 线段树维护某个区间的数的个数cnt,再维护区间区间内数%5相同的和mod_sum #include<bits/stdc++.h> #include <unordered_map> using namespace std; template<clas

weach的博客 247

FPGA实战:AXI BRAM Controller配置避坑指南(Vivado 2023版)

本文详细解析了Vivado 2023环境下AXI BRAM Controller的配置技巧与避坑指南,涵盖AXI4协议转换、BRAM地址空间配置、信号异常处理及突发传输优化等核心内容。针对写时序冲突、跨时钟域处理等常见问题提供实用解决方案,帮助开发者提升FPGA系统性能与稳定性。

q1w3e5r7t9y的博客 342

【图像压缩】超先验模型 《VARIATIONAL IMAGE COMPRESSION WITH A SCALE HYPERPRIOR》

绪论 2015年,第一个端到端图像编码方案被提出。基于深度学习的端到端图像压缩主要分为两类,一类是基于RNN的方法,一类是基于CNN的方法。本文对基于CNN的方法

hahalidaxin的专栏 1万+

Sum of Medians

Sum of Medians time limit per test 3 seconds memory limit per test 256 megabytes In one well-known algorithm of finding thek-th order statistics we should divide all elements into grou...

weixin_30702887的博客 260

BPC坏点矫正

whatis the Bad Pixel? 坏点为死点,也就是基本不随照度变化呈现光电线性转换的关系。表现为暗态常亮,亮态常暗。 坏点分类:静态坏点:亮坏点,暗坏点。 动态坏点:在一定像素范围内,该点表现正常,而超过这一范围,该点表现的比周围像素要亮。与sensor ...

camerall 1万+

B. Sum of Medians(思维+数学)

https://codeforces.com/contest/1440/problem/B 题意:划分序列,求每个块中的中位数之和,构造使得最大。 思路:n=2的时候,n/2=1,贪心从前往后取2个,不浪费后面的大数。 n>2的时候,比如n=3.前取1个,后取2个,贪心最大。 n=4的时候,n/2=2;所以要前面1个,后面3个。中位数在大的一边。 n/5=的时候n/2=3,前面2个,后面3个。中位数在大的一边。 然后O(n)后往前扫 #include<iostream> #

代码笔记本 561

用 CDS 作为 Referenced Data Source 开发 SAP Gateway OData 服务,一条更轻的 SEGW 路线

本文介绍了SAP Gateway项目中从传统手工建模到基于CDS View的现代化开发方式转变。主要内容包括: 传统方式需要在SEGW中手动创建Entity Type、Entity Set等元素,并在DPC_EXT中编写大量查询逻辑,存在模型层和业务逻辑重复表达的问题。 7.50版本后,SAP Gateway与ABAP CDS深度集成,可通过SEGW直接引用CDS View作为数据源,自动生成数据模型和SADL读取逻辑,支持完整的OData查询功能。 最佳实践建议通过Consumption View而非直接

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 707

五、实战pxe安装ubuntu 22.04 软raid1(实际生产pxe配置)

这段配置文件是一个cloud-init的自动安装配置,用于自动化部署Ubuntu服务器操作系统。它定义了从系统身份、键盘布局、区域设置到磁盘分区和RAID配置的一系列设置,并且包含了在安装过程的最后阶段执行的一些命令。基础设置version: 1指定了autoinstall配置文件的版本。source定义了安装源,这里是ubuntu-server。identity设置了主机名(hostname)、用户(username)和密码(password注意这里的密码是经过加密的。键盘与语言设置。

jundao1997的专栏 999

Codeforces 85D Sum of Medians[线段树]

题意:给了一个set,有n个操作,有三种操作 1. add  x 把 x 放入set中; 2. del  x 把 x 从set中删去; 3. sum 求set中,第n大的数,n%5==3,的总和。 分析:因为x有[0,1e9],所以肯定要离散化处理,刚开始我的思路是线段树存当前区间的个数,然后每个sum去二分[1,m]有余5是3的个数的值,发现还是会T。 正解是:每个线段

C_z_Q 679

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Codeforces 85 D-Sum of Medians 【线段树】

题目来源:https://codeforces.com/problemset/problem/85/D ★这题看输入感觉是线段树,但是写的时候没有一点思路。。。 题意: 有3种操作 1.添加一个数到集合中 2.删除集合中的某个元素 3.输出 集合排序后 序号mod5==3 的所有元素的和 其中:不会往集合中添加 已经出现过的元素,也不会无缘无故删去 集合中没有的元素 思路: 可以预存 代...

HungTeen的博客 326

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

CodeForces 85D Sum of Medians Splay | 线段树

Sum of Medians 题解: 对于这个题目,先想到是建立5棵Splay,然后每次更新把后面一段区间的树切下来,然后再转圈圈把切下来的树和别的树合并。 但是感觉写起来太麻烦就放弃了。 建立5棵线段树。 然后 seg[rt][i]代表的是只考虑当前所管辖的区间中的情况下, 下标对5取余之后为 i 的那些值的和。 最重要的一点是更新。 for(int i = 0; ...

weixin_34378969的博客 112

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

CodeForces 85D Sum of Medians(线段树 + 离散化)

题意:n次操作,有三种操作:加入一个集合中没有的数,删除一个集合中已有的数,求集合中位置模5余3的数之和(集合自动从小到大排序)。 因为操作最多是1e5次,但是数的范围最大到1e9,所以要采用离散化。线段树中每个结点有一个长度为5的数组,来记录模5的余数,还有一个m数组,若在第i个位置插入或删除一个数,则该位置后面的每个结点的m都要加1或者是减1,来记录该结点位置模5后余数的变化。 这道题敲了

Willona_C的博客 1087

Sum of Medians CodeForces - 85D(线段树+离散化)

Sum of Medians 题目链接:CodeForces - 85D 题意:对于...

Sirius_han的博客 374

「一题多解」【CodeForces 85D】Sum of Medians(线段树 / 分块)

题目链接 【CodeForces85D】Sum of Medians 题目大意 实现一个setsetset,支持插入,删除,求∑a5k+3∑a5k+3\sum a_{5k+3}。注意,setsetset中的数在任何时刻都应该是排好序的。 题解 I 首先想到离线处理,每一个数字有一个离散化后的编号。 线段树的每一个节点维护五个值,分别表示∑a5k+t∑a5k+t\sum{a_{5...

Galaxy Coder 的博客 449

codeforces 85D. Sum of Medians(线段树or分块)

题目链接:codeforces 85D. Sum of Medians 题意: addx表示向集合中添加x(添加x的时候保证x是第一次被添加入集合)delx表示从集合中删除x(删除x的时候保证x存在于集合中)sum将集合排序后,询问集合里面所有下标i%5=3的元素的和(如果集合为空输出0) 题解: 线段树的每一个节点维护5个值,表示这个区间%5的和,然后开一个mov...

weixin_30426879的博客 170

CodeForces 85 D.Sum of Medians(线段树)

Description 定义一个k个元素的序列S={a[1],a[2],…,a[k]},a[i] < a[I+1]的值为,初始S为空,n种操作,操作有三种: add x:将x加入到集合S中 del x:将x从集合S中删除 sum:查询集合S的值 Input 第一行一整数n表示操作数,之后n行每行一个操作(1<=n<=1e5,x<=1e9) Output 对于每次sum操作,输出一个

ZSQ 403

codeforces 85D D. Sum of Medians 线段树

D. Sum of Medians time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output In one well-known algorithm of finding the ...

weixin_30640291的博客 113

【codeforces 85D】Sum of Medians 线段树单点更新+离散化

题目链接:http://codeforces.com/contest/85/problem/D 题目大意:有n次操作,操作分3种类型,add x、del x、sum。 add x:向数组中插入数字x,保证插入之前数组中不存在x。 del x:从数组中删除数字x,保证删除之前数组中一定存在x。 sum:将数组从小到大排序后,计算所有第i%5==3(也就是3、8、13、18这样的位置)位的数字...

逆风起飞 251

HDU 4288 Coder || CodeForces - 85D Sum of Medians (线段树)

题意: 给你3种操作: 1. 向集合中加入数x。 2.在集合中删除数x。 3.求和sum:  将集合中的数组排好序,将下标(从1开始) 对5取模为3 的位置的数 求和。 思路: 线段树结点  sum[i] 表示  对5取模为i 的数的和。 cnt 表示这个区间内存在的数的个数。 那么每次1,2 操作更新单个结点, 然后pushup: 左子树的位置和父结点的下标位置是一样的, 右

aozil_yang的博客 510
上一篇: bzoj 1103 大都市meg (dfs序+线段树)
下一篇: bzoj 1018 堵塞的交通traffic (线段树)
Roll_Keyboard
博客等级 码龄9年 10粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值