hdu 4288 离线线段树+间隔求和

KEITHLEY 2182A + 6220/6221 系列测试系统软件 6221型与2182A型相结合,是业界最完整的差分电导测量解决方案 阅读详情

Coder

Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4838    Accepted Submission(s): 1853


Problem Description
  In mathematics and computer science, an algorithm describes a set of procedures or instructions that define a procedure. The term has become increasing popular since the advent of cheap and reliable computers. Many companies now employ a single coder to write an algorithm that will replace many other employees. An added benefit to the employer is that the coder will also become redundant once their work is done. 1
  You are now the signle coder, and have been assigned a new task writing code, since your boss would like to replace many other employees (and you when you become redundant once your task is complete).
Your code should be able to complete a task to replace these employees who do nothing all day but eating: make the digest sum.
  By saying “digest sum” we study some properties of data. For the sake of simplicity, our data is a set of integers. Your code should give response to following operations:
  1. add x – add the element x to the set;
  2. del x – remove the element x from the set;
  3. sum – find the digest sum of the set. The digest sum should be understood by

  where the set S is written as {a1, a2, ... , ak} satisfying a1 < a2 < a3 < ... < ak 
  Can you complete this task (and be then fired)?
------------------------------------------------------------------------------
1 See http://uncyclopedia.wikia.com/wiki/Algorithm
 

Input
  There’re several test cases.
  In each test case, the first line contains one integer N ( 1 <= N <= 105 ), the number of operations to process.
  Then following is n lines, each one containing one of three operations: “add x” or “del x” or “sum”.
  You may assume that 1 <= x <= 109.
  Please see the sample for detailed format.
  For any “add x” it is guaranteed that x is not currently in the set just before this operation.
  For any “del x” it is guaranteed that x must currently be in the set just before this operation.
  Please process until EOF (End Of File).
 

Output
  For each operation “sum” please print one line containing exactly one integer denoting the digest sum of the current set. Print 0 if the set is empty.
 

Sample Input
9 add 1 add 2 add 3 add 4 add 5 sum add 6 del 3 sum 6 add 1 add 3 add 5 add 7 add 9 sum
 

Sample Output
3 4 5


/*
hdu 4288 离线线段树+间隔求和
分别有添加,删除,求和
sum是求 i%5==3的所有数的和,而且数列满足a[0] < a[1] ......
开始以为只会在数列后面添加,然后WR
而且最开始觉得求和很麻烦,于是试了下暴力点的TLE

所以先对所有要用的数进行处理,然后每次找出它们应该在的位置,进行插入删除即可。
主要是没想到两边有规律能推出公式,sum[j]保存当前区间mod 5为j的和
tree[i].sum[j]=(ll)(tree[lson].sum[j]+tree[rson].sum[((j-tree[lson].cnt)%5+5)%5]);

hhh-2016-03-02 23:14:26
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <map>
#include <queue>
#include <vector>
#define lson (i<<1)
#define rson (i<<1|1)
using namespace std;
typedef long long ll;
typedef long double ld;
const int maxn = 500000+10;
int x[maxn];
int tp[maxn],tot;
char opr[maxn][10];
struct node
{
    int l,r;
    ll sum[6];
    int cnt;
    int mid()
    {
        return (l+r)>>1;
    }
} tree[maxn<<2];
int flag;
void push_up(int i)
{
    for(int j = 0; j < 5; j++)
    {
        tree[i].sum[j] = (ll)(tree[lson].sum[j]+tree[rson].sum[((j-tree[lson].cnt)%5+5)%5]);
    }
}

void build(int i,int l,int r)
{
    tree[i].l=l,tree[i].r=r;
    tree[i].cnt = 0;
    memset(tree[i].sum,0,sizeof(tree[i].sum));
    int mid = tree[i].mid();
    if(l == r)
        return;
    build(lson,l,mid);
    build(rson,mid+1,r);
}

void update(int i,int k,int val)
{
    tree[i].cnt += 2*flag-1;
    if(tree[i].l == k && tree[i].r == k)
    {
        tree[i].sum[0] = flag*val;
        return ;
    }
    int mid = tree[i].mid();
    if(k <= mid)update(lson,k,val);
    else update(rson,k,val);
    push_up(i);
}

int Search(int k)
{
    int l = 0,r = tot-1;
    while(l<=r)
    {
        int mid = (l+r)>>1;
        if(tp[mid]<k)
            l = mid+1;
        else if(tp[mid]>k)
            r = mid-1;
        else
            return mid;
    }
}
int main()
{
    int n;
    while(scanf("%d",&n) != EOF)
    {
        tot = 0;
        for(int i = 0; i<n; i++)
        {
            scanf("%s",opr[i]);
            if(opr[i][0] != 's')
            {
                scanf("%d",&x[i]);
                tp[tot++] = x[i];
            }
        }
        sort(tp,tp+tot);
        tot = unique(tp,tp+tot)-tp;//去重
        if(!tot)
            memset(tree[1].sum,0,sizeof(tree[1].sum));
        else
            build(1,0,tot);
        for(int i =0; i < n; i++)
        {
            if(opr[i][0] == 's')
            {
                printf("%I64d\n",tree[1].sum[2]);
            }
            else if(opr[i][0] == 'a')
            {
                flag = 1;
                int pos = Search(x[i]);
                update(1,pos,x[i]);
            }
            else if(opr[i][0] == 'd')
            {
                flag =0 ;
                int pos = Search(x[i]);
                update(1,pos,x[i]);
            }
        }
    }
    return 0;
}




Joern实战:从代码导入到Python分析的全流程避坑指南(附常见错误解决方案) 本文详细介绍了Joern静态分析工具从代码导入到Python分析的全流程实践指南,包括环境配置、代码导入技巧、数据库服务优化、Python交互分析及性能调优等关键步骤。特别针对常见错误提供了实用解决方案,帮助开发者高效进行代码安全分析和漏洞挖掘。 阅读详情

相关推荐

配电变压器测控终端装置设计

配电变压器测控终端装置在电网运行中承担着数据采集、状态监测、故障预警及远程控制的关键任务,其性能直接关系到配电系统的安全性与可靠性。本研究围绕测控终端的硬件电路、软件算法、通信系统及系统优化展开深入分析,并基于实验测试验证系统性能。硬件设计包括模拟量输入电路、电压电流信号变换电路、A/D转换电路、控制与通信电路及系统电源电路,确保信号采集的高精度与系统的稳定性。软件部分涵盖系统控制程序、数据采集与处理程序、通信程序及显示与控制程序,实现数据的实时处理与传输。通信模块结合RS-485、CAN总线及以太网技术,

weixin_44553616的博客 1103

hdu3333(线段树离散化离线处理)

#include #include #include using namespace std; typedef long long ll; const int maxn = 30005; int n,m; ll num[maxn],tmp[maxn]; int vis[maxn],pre[maxn]; ll tree[maxn<<2]; struct node { int l,r,pos;

constbh的博客 451

C++实战指南:使用CodeBlocks构建跨平台wxWidgets窗口应用

本文是一份面向C++初学者的实战指南,详细介绍了如何使用CodeBlocks IDE和wxWidgets框架快速构建跨平台的桌面窗口应用。内容涵盖从环境搭建、项目配置到界面设计、事件处理的全流程,重点讲解了如何利用CodeBlocks的开箱即用支持和wxSmith可视化设计器,高效开发具有按钮、菜单、列表等控件的交互式窗口界面程序,帮助读者轻松入门GUI开发。

weixin_29012677的博客 154

线段树例题 henu Sanzo' 建议

题目链接 题目描述: 输入一个数 n ,接下来一行给定一个长度为 n 的序列,输入一个数 m ,接下来 m 次询问,每次询问输入两个数 l ,r,输出数列中 l ,r区间内的异或和。 异或有这么一些性质 a ^ b ^ a = b a ^ 0 = a 通过这些性质,我们可以知道,一个区间 l ,r 内的异或和等于 [l , r - 1] ^ a[ r ] 或者是 [ l , r + ...

correct 198

告别第三方插件:官方Fused Library如何重塑Android库的合并与发布流程

本文详细介绍了Android官方推出的Fused Library如何替代第三方fat-aar插件,优化Android库的合并与发布流程。通过原生支持、智能依赖管理等优势,Fused Library解决了版本兼容性、依赖传递等核心痛点,提供了更稳定高效的开发体验。文章还提供了迁移实操指南和工程实践建议,帮助开发者顺利过渡到官方方案。

weixin_42561040的博客 253

蓝牙Mesh协议一基本概念

前言 蓝牙SIG联盟在2017年发布了蓝牙Mesh1.0的协议规格,基于低功耗广播包来实现的多对多的通信技术,Mesh协议建立在BLE的物理层和链路层上,所以也可以和BLE的蓝牙进行通信 本章主要介绍蓝牙Mesh的基本概念和协议中的层级结构,也是参考网上的资料,如有异议,欢迎留言指正 基本概念 广播和洪泛 蓝牙Mesh技术是基于BLE的广播报文来实现的,是一种洪泛的消息传输机制,Mesh网络的节点间通过3个广播信道进行通信。当蓝牙Mesh网络中的节点收到消息后会转发这条消息,大大增加了网络的覆盖范围;但

9739

【线段树 && 离线处理 && 维护区间规定下标的和】HDU - 4288 Coder

Problem Dscription 给你n个操作,操作分为三种,(1): add x,往集合里面添加元素x。(2): del x,从集合里面移除元素x。(3): sum 求下标mod 5 == 3的对应元素值的和。集合满足从小到大 思路: 离线处理:就是先输入完数据后在处理。线段树维护两个量,num代表该区间有几个数。sum[]代表该区间mod5==1的和,mod5==2的和,mod5==

ACMer 梁剑锋 的博客 294

Xilinx SDK工程编译、链接、调试注意事项

1、添加工程 启动SDK时选取workspace,如下图所示: 对应的workpace文件夹中会生成如下几个文件: 如果当前workspace是首次加载工程,SDK会进入启动界面 点击Import Project,导入已有工程 点击Browse,添加工程路径,一个完整的工程包含一个bsp文件夹,一个HW文件夹,和一个src文件夹(添加C功能函数) 点击Fini...

Autumn_He的博客 1万+

HDU 4288 Coder 【线段树】

题目链接segment tree, single-point update题意维护一个集合,这个集合可进行以下操作: + 向其中添加一个数(保证之前没有这个数) + 向其中删除一个数(保证集合中有这个数) + 求所有下标%5==3的数的和(从小到大排列) 完成给定的操作,返回sum的值分析求区间和问题,尝试使用线段树。然而是求的有步长的和,怎么处理?首先,每个区间中记录下标模5相同的数的和(

Help me up!I can still AC! 492

如何使用Ray和PyTorch训练模型

用户编写训练函数 → 定义单机训练逻辑。通过扩缩容配置 → 指定需要多少资源(Worker 数量、CPU/GPU)。训练器整合训练函数和配置 → 自动将训练函数分发到多个 Worker 上并行执行。Worker 运行训练函数 → 在分布式环境中完成模型训练。通过这种模式,Ray Train 实现了对分布式训练的抽象,用户只需关注单机训练逻辑,无需手动管理分布式通信和资源分配。

m0_62464865的博客 1922

10.嵌入式控制器EC实战 GPIO开发流程

文章目录1.General Control Register (GCR),通用控制寄存器,地址0x1602.GPDRA—GPDRJ端口数据寄存器组(共10组)3.Port Control n Registers (GPCRn, n = A0-I7),端口控制寄存器4.GPIO端口编程指导编程步骤端口初始化使用InitGPIOReg数据结构初始化所有端口默认工作模式读取输入引脚的值(STATE_ACin()): IT8502中各个引脚的描述见下表所示: 在嵌入式控制器EC的IT8502主控芯片中,通过芯片的

qq_30135687的博客 2285

hdu 4288

这题按我的做法是超时的,虽然开始也知道这应该是个线段树,不过由于之前都是看还没独立写过,所以没去尝试,果然那后面自己的写法超时了,没办法还是得用线段树,可基本不太会怎么办····最后只好先看看别人的代码了,不过能看懂也说明之前线段树的学习是有成效的,好像这题不仅有线段树,还说有离散化什么的,我猜大概意思是把每个下标mod 5的和用线段树表示出来,由于他们是间隔散乱的,如何让他们整合用线段树来表达,

NiaNiaJR的专栏 952

基于Simulink的自适应反步法(Adaptive Backstepping)控制​

本文针对非线性系统控制中未知参数和强非线性耦合的挑战,提出基于Simulink的自适应反步法解决方案。通过融合参数在线估计与反步递归设计,该方法显著提升了永磁同步电机(PMSM)速度控制的鲁棒性,使跟踪误差从20%降至3%,参数估计收敛时间小于0.5秒。文章详细阐述了从算法推导到Simulink实现的完整流程,包括系统架构设计、核心算法推导(以PMSM为例)、模块化建模方法、参数优化策略以及工程部署建议。提供的自适应控制器MATLAB代码和关键参数表可直接应用于实际工程,为电机驱动、机械臂等非线性系统控制提

xiaoheshang_123的博客 101

hdu 4630 查询[L,R]区间内任意两个数的最大公约数

No Pain No Game Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2000    Accepted Submission(s): 851 Problem Description Life is a g

阳光下的泡沫 2622

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

hdu5634 BestCoder Round #73 (div.1)

Rikka with Phi    Accepts: 5    Submissions: 66  Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Problem Description Rikka and Yuta are in

阳光下的泡沫 801

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SPOJ DQUERY树状数组离线or主席树

D-query Time Limit: 227MS   Memory Limit: 1572864KB   64bit IO Format: %lld & %llu Submit Status Description English Vietnamese Given a sequence of n nu

阳光下的泡沫 771

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

2015 多校联赛 ——HDU5316(线段树)

Fantasy magicians usually gain their ability through one of three usual methods: possessing it as an innate talent, gaining it through study and practice, or receiving it from another being, often a g

阳光下的泡沫 700

hdu 4638 树状数组 区间内连续区间的个数(尽可能长)

Group Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1959    Accepted Submission(s): 1006 Problem Description There are n men ,eve

阳光下的泡沫 674

zoj2112 树状数组+主席树 区间动第k大

Dynamic Rankings Time Limit: 10000MS   Memory Limit: 32768KB   64bit IO Format: %lld & %llu Submit Status Description The Company Dynamic Rankings has developed a new k

阳光下的泡沫 650

hdu 4578 线段树(标记处理)

Transformation Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others) Total Submission(s): 4095    Accepted Submission(s): 1008 Problem Description Yuanfang i

阳光下的泡沫 636

hdu4605 树状数组+离散化+dfs

Magic Ball Game Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 2189    Accepted Submission(s): 634 Problem Description When the m

阳光下的泡沫 610

hdu3340 线段树+多边形

Rain in ACStar Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 788    Accepted Submission(s): 218 Problem Description Maybe you hav

阳光下的泡沫 605

hdu 3436 线段树 一顿操作

Queue-jumpers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3348    Accepted Submission(s): 904 Problem Description Ponyo and Gar

阳光下的泡沫 581

hdu 5493 (树状数组)

题意:在一个队列中,你知道一个人在他左边或者右边比他高的人的个数,求字典序最小的答案 思路:先将人按  矮-->高 排序,然后算出在每个人前面需要预留的位置。树状数组(也可以线段树)解决时,先二分查找合适的位置,如果合理则标记,每次查找时    枚举的人数 - 前面已占的人数 = 可预留位置 判断分别在它左边 或者 右边时可能的最小值进行比较。 预留的位置①:pnode[i].num(即比他

阳光下的泡沫 578

hdu 3397 线段树双标记

Sequence operation Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7502    Accepted Submission(s): 2233 Problem Description lxhgww

阳光下的泡沫 563

hdu 2871 线段树(各种操作)

Memory Control Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5913    Accepted Submission(s): 1380 Problem Description Memory unit

阳光下的泡沫 557
上一篇: hdu 3016 dp+线段树
下一篇: hdu1698 线段树区间更新
Tyuio28
博客等级 码龄11年 12粉丝 279原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值