hdu 4267 线段树间隔更新

1548 A Simple Problem with Integers 1548 A Simple Problem with Integers 嗯?是一个模板题,用来蹭文章量 #include<bits/stdc++.h> using namespace std; const int maxn=1e6+5; int a[maxn+2]; struct tree { int l,r;//维护区间的范围 long long pre,add;//pre节点的值 add懒坐标 }t[4*maxn+2]; void bulid(int p,i 阅读详情

A Simple Problem with Integers

Time Limit: 5000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4996    Accepted Submission(s): 1576


Problem Description
Let A1, A2, ... , AN be N elements. You need to deal with two kinds of operations. One type of operation is to add a given number to a few numbers in a given interval. The other is to query the value of some element.
 

Input
There are a lot of test cases. 
The first line contains an integer N. (1 <= N <= 50000)
The second line contains N numbers which are the initial values of A1, A2, ... , AN. (-10,000,000 <= the initial value of Ai <= 10,000,000)
The third line contains an integer Q. (1 <= Q <= 50000)
Each of the following Q lines represents an operation.
"1 a b k c" means adding c to each of Ai which satisfies a <= i <= b and (i - a) % k == 0. (1 <= a <= b <= N, 1 <= k <= 10, -1,000 <= c <= 1,000)
"2 a" means querying the value of Aa. (1 <= a <= N)
 

Output
For each test case, output several lines to answer all query operations.

Sample Input

4 
1 1 1 1
14
2 1
2 2
2 3
2 4
1 2 3 1 2
2 1 
2 2
2 3
2 4
1 1 4 2 1
2 1
2 2
2 3
2 4

Sample Output

1
1
1
1
1
3
3
1
2
3
4
1


/*
hdu 4267 线段树间隔更新
A Simple Problem with Integers

给你两个操作:
1.在[l,r]中(i-l)%k==0的数加上val
2.单点求值

看到题想到的是做过的一个间隔求和的题目,但是这题的k是不固定的
所以并不适用

对于每个数,如果用k的余数将它们标记,可以分成k组,所有k的情况总共55种,
所以用add[55]来保存新添加的值.
然后在查找pos的时候,加上对于每个k而言pos所属组的值即可

hhh-2016-03-26 13:47:26
*/
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define lson  (i<<1)
#define rson  ((i<<1)|1)
typedef long long ll;
int n,qw;
int k;
const int maxn = 50050;
int po[15][15];
int a[maxn];
struct node
{
    int l,r;
    int sum;
    int add[56];
    int mid()
    {
        return (l+r)>>1;
    }
} tree[maxn*5];



void push_up(int i)
{

}

void build(int l,int r,int i)
{
    tree[i].l = l;
    tree[i].r = r;
    tree[i].sum = 0;
    memset(tree[i].add,0,sizeof(tree[i].add));
    if(l == r)
        return ;

    int mid = tree[i].mid();
    build(l,mid,lson);
    build(mid+1,r,rson);
    push_up(i);
}

void push_down(int i)
{
    if(tree[i].sum)
    {
        tree[lson].sum += tree[i].sum;
        tree[rson].sum += tree[i].sum;

        for(int j = 0; j < 55; j++)
        {
            tree[lson].add[j]+= tree[i].add[j];
            tree[rson].add[j]+= tree[i].add[j];
            tree[i].add[j] = 0;
        }
        tree[i].sum = 0;
    }
}
void Insert(int i,int l,int r,int val,int k,int t)
{
    if(tree[i].l >= l && tree[i].r <=r )
    {
        tree[i].sum += val;
        tree[i].add[po[k][t]] += val;
        return ;
    }
    int mid = tree[i].mid();
    push_down(i);
    if(l <= mid)
        Insert(lson,l,r,val,k,t);
    if(r > mid)
        Insert(rson,l,r,val,k,t);
    push_up(i);
}

int query(int i,int pos)
{
    //if(tree[i].l >= l && tree[i].r <= r)
    if(tree[i].l == tree[i].r)
    {
        int tmp = 0;
        for(int j = 1;j <= 10;j++)
            tmp += tree[i].add[po[j][pos%j]];
        return tmp;
    }
    push_down(i);
    int mid = tree[i].mid();

    if(pos <= mid)
        return query(lson,pos);
    if(pos > mid)
        return query(rson,pos);
}

int main()
{
    int T,cas = 1,cnt = 0;
    for(int i = 1; i <= 10; i++)
    {
        for(int j = 0; j < i; j++)
            po[i][j] = cnt++;
    }

    while(scanf("%d",&n) != EOF)
    {
        for(int i = 1;i <= n;i++)
            scanf("%d",&a[i]);
        build(1,n,1);

        int l,r,q;
        int val,k;
        scanf("%d",&q);
        for(int i = 1; i <=q; i++)
        {
            int op;
            scanf("%d",&op);
            if(op == 1)
            {
                scanf("%d%d%d%d",&l,&r,&k,&val);
                Insert(1,l,r,val,k,l%k);
            }
            else
            {
                scanf("%d",&l);
                printf("%d\n",query(1,l)+a[l]);
            }
        }
    }
    return 0;
}





容器内存黑洞排查手册:当PageCache让你的Pod莫名被OOM时 本文深入剖析了容器环境中因Linux内核PageCache机制导致Pod被OOM Killer终止的“内存黑洞”问题。文章解释了Kubernetes基于Working Set内存指标进行OOM判断的逻辑,揭示了传统监控工具与cgroup统计的差异,并通过典型场景分析、实战诊断工具和优化策略,提供了从问题定位到系统调优的完整解决方案。 阅读详情

相关推荐

el-table通过上下左右键移动光标

在Element Plus的el-table中包含el-input和el-select组件,要实现上下左右键控制光标位置,需要通过focus和blur跟踪判断当前是哪个el-input或el-select有焦点,当按键按下时,通过监听,计算下一个获取焦点元素的索引,通过focus方法将焦点切换至改元素。

秋思的博客 1350

1548:【例 2】A Simple Problem with Integers

【题目描述】 这是一道模板题。 给定数列 a[1],a[2],…,a[n] ,你需要依次进行 q 个操作,操作有两类: 1、lrx :给定 l,r,x,对于所有 i∈[l,r],将 a[i] 加上 x(换言之,将 a[l],a[l+1],…,a[r] 分别加上 x ); 2、lr :给定 l,r,求 ∑ri=la[i] 的值(换言之,求 a[l]+a[l+1]+⋯+a[r] 的值)。 【输入】 第一行包含 2 个正整数 n,q,表示数列长度和询问个数。保证 1≤n,q≤106 。 第二行 n 个整数 a[1

lyc_lb 877

Icarus Verilog和GTKwave使用简析

本简要介绍Icarus Verilog和GTKwave的使用,使用iverilog(Icarus Verilog)编译仿真verilog而使用GTKWave查看仿真数据波形下载安装 基本使用 iverilog使用 GTKWave使用 iverilog常用选项 使用库 注意

husipeng86的专栏 1万+

A Simple Problem with Integers

You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of operation is to add some given number to each number in a given interval. The other is to ask for the ...

无限迭代中...... 1054

Multisim14.3主数据库访问冲突:Windows更新KB5065426卸载与系统兼容性修复指南

本文针对Multisim14.3在Windows更新KB5065426后出现的主数据库访问冲突问题,提供了详细的解决方案。通过卸载问题更新、修复系统兼容性及调整权限设置,帮助用户快速恢复元器件库的正常访问,确保电路仿真设计的连续性。

lstm7chronicler的博客 512

青少年C/C++软件编程(四级)等级考试真题及答案解析目录

3. 带通配符的字符串匹配。1. 怪盗基德的滑翔翼。3.最长公共子上升序列。4.宠物小精灵之收服。

长春高老师编程 3032

1548:A Simple Problem with Integers

const int N=1e6+5; int n,m,t; int i,j,k; int a[N]; struct Node { int l, r; ll sum,lazy; void update(int x) { sum+=1ll*(r-l+1)*x; lazy+=x; } }node[N<<2]; ...

C_Dreamy的博客 649

Claude Code 实战 从零教你用 Claude Code 干活

Claude Code 实用指南:AI 编程助手的核心功能与使用技巧 Claude Code 是 Anthropic 推出的智能编程助手,可直接在本地环境中执行操作,相比传统 AI 对话工具具有显著优势:能直接读取项目文件、自动执行修改、记忆项目规则,并支持连接外部服务。本文详解其安装配置、三大核心场景(资料搜索、网页抓取、文章撰写)及进阶功能(Skills、MCP协议、斜杠命令)。特别提供了工作模式切换、CLAUDE.md配置文件等实用技巧,并附常见问题解决方案,帮助用户高效利用这一"坐在身边的

2401_84052244的博客 7470

信息学奥赛一本通 1547:【 例 1】区间和

本题给出了两种解法来维护区间和并实现单点修改与区间查询操作。解法1使用线段树,通过递归构建树结构实现区间查询与更新;解法2采用树状数组,利用lowbit运算高效完成单点修改和前驱查询。两种方法均可有效解决问题,线段树代码更直观但实现略复杂,树状数组代码简洁且效率较高。核心思路都是通过预处理数据结构来优化区间操作的时间复杂度。

君义NOIP的博客 524

C# 工业上位机集成 YOLOv8 全实战:模型转换→相机取流→PLC 联动落地部署

// 检测结果实体类,工业场景扩展置信度、坐标、类别字段set;set;set;set;/// 模型配置常量,与导出参数保持一致// 置信度阈值// 非极大值抑制阈值public static readonly string[] ClassNames = { "物料", "缺陷", "挡板" };// 自定义类别本文完整实现了YOLO模型转换→C#上位机集成→工业相机对接→PLC联动→现场部署标准化模型转换流程,杜绝C#端兼容性问题;解耦相机取流、推理、UI线程,满足工业高稳定性要求;

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 320

【气候极端指数】MATLAB计算各种气候极端指数

简介各类气候极端指数,及其MATLAB计算代码

WW、forever的博客 4917

hdoj 4267 - 线段树

2012长春赛区网络赛。。。A题 http://acm.hdu.edu.cn/showproblem.php?pid=4267 01给数组Ai  有初始值  现有两个操作 1.给区间[a,b]中满足(i - a) % k == 0的每一个Ai的值加c 2 询问Ai的值 形成线段树的想法,很明显,由于k 比赛的时候sb的直接开add[10][10]...一直mle

xuanflyer 1148

【异常】出现“‘git‘ 不是内部或外部命令,也不是可运行的程序”的错误

出现“‘git’ 不是内部或外部命令,也不是可运行的程序”的错误通常意味着 Git 没有被正确安装在你的系统上,或者其可执行文件的路径没有被添加到系统的环境变量中。

奶爸的编程之路,也就一周冷个三天 1389

hdu4267线段树段更新,点查找,55棵线段树.

题意: 给你N个数,q组操作,操作有两种,查询和改变,查询就是查询当前的这个数上有多少,更改是给你a b k c,每次从a到b,每隔k的数更改一次,之间的数不更改,就相当于跳着更新. 思路:(别人的) (i - a) % k == 0 等价于 i % k == a % k 一共有10中情况 ...

墨鱼菜鸡 69

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

hdu 4267 A Simple Problem with Integers(线段树

题意:给定一个数组A,然后进行两种操作 1.对 a,b区间内任意i,如果(i-a)%k==0,则将Ai的值加上c;2.输入任意a,输出Aa的值。 思路:线段树 1<=k<=10 因为线段树只能存连续的数,单点/区间,查询,修改。 题目说要间隔几个数再增加。 所以想到多建几棵树。 具体是1+2+3+…+10棵。 由余数和除数决定。 k=1时,mod=0; k=2时,mod=0、1; k=10时,mod=0、1、…、9 总共55个。 #define MAX 50050 #define mid (l+

yxrzibinanhai的博客 178

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

HDU 4267 线段树 离散点区间更新, 自叶子节点至根单点查询

题意: n个数字 下面n个数字表示数列 2个操作 1 [u, v] k add [u,v ]区间(u点要计算)每隔k个位置,该数字+add 2 pos 询问 pos下标的值(下标从1开始) 思路: 因为k很小, 可以直接存 k[11] 注意查询时, 先找到 pos 所在的 叶子节点 再向上 添加 对应k位置的值 #include<i...

weixin_30652491的博客 117

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

HDU 4267 A Simple Problem with Integers

方法参考http://blog.youkuaiyun.com/acm_cxlove/article/details/7854526 题目:给出n个数,每次将一段区间内满足(i-l)%k==0 (r&gt;=i&gt;=l) 的数ai增加c http://acm.hdu.edu.cn/showproblem.php?pid=4267 比较容易往线段树上想的。但是由于更新的是一些离散的点,比较麻烦 可以考虑这...

weixin_33795806的博客 108

hdu 4267 A Simple Problem with Integers

题意:给你两个操作,,“1 a b k c”表示在区间[a,b]内位置满足(i-a)%k=0的数加上c,k的范围在1到10之间。“2 a”表示查询第a个数。 首先明确,(i-a)%k=0等价于i%k=a%k,即i满足i+k满足,i+2*k也满足……。但是如果想用如线段树,数状数组等数据结构去优化,要求数必须是连续的一段的,所以思路就是所间隔的数整合在一起。设数状数组bit[i][j]表示当k等于

1970

【专题】线段树

单点更新 最最基础的线段树,只更新叶子节点,然后把信息用PushUP(int r)这个函数更新上来。 hdu1166 敌兵布阵 线段树 hdu 1166 敌兵布阵 单点更新区间求和 hdu1754 I Hate It 线段树 hdu 1754 I Hate It 单点更新 区间求最值 hdu1394 Minimum Inversion Number hdu 1394

Azarath Metrion Zinthos 1091

线段树专题

最最基础的线段树,只更新叶子节点,然后把信息用PushUP(int r)这个函数更新上来。 hdu1166 敌兵布阵 线段树 hdu 1166 敌兵布阵 单点更新区间求和 hdu1754 I Hate It 线段树 hdu 1754 I Hate It 单点更新 区间求最值 hdu1394 Minimum Inversion Number hdu 1394 Minimum Invers

SeeYouAlways 645

hdu 4267 A Simple Problem with Integers

点击打开链接  A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3958    Accepted Submission(s): 1222 Probl

寂斜 299

ACM训练周中总结—10月12日

过去的这个半周主要是在做题,做到了几道我觉得有启发的题,下面就回忆一下吧。         首先是树状数组H题  HDU 4267 A Simple Problem With Integers ,就是给了一串数,两种操作,1是找给位上数的值,2是给l到r上,且(i - l) %k ==0(l        还顺便水了道逆序数的题C题,给一串数,Q求顺序数对的总个数,R更新将l到r区

snayf的博客 236

1548:【例 2】A Simple Problem with Integers(线段树+区间修改+区间查询)

1548:【例 2】A Simple Problem with Integers 时间限制: 5000 ms 内存限制: 524288 KB 提交数: 2380 通过数: 580 【题目描述】 这是一道模板题。 给定数列 a[1],a[2],…,a[n],你需要依次进行 q 个操作,操作有两类: 1、lrx:给定 l,r,x,对于所有 i∈[l,r],将 a[i] 加上 x(换言之,将 a[l],a[l+1],…,a[r] 分别加上 x); 2、lr:给定 l,r,求 ∑ri=la[

Aimer的博客 829
上一篇: hdu 4747 线段树
下一篇: hdu5651 xiaoxin juju needs help(逆元)
Tyuio28
博客等级 码龄11年 12粉丝 279原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值