题意:

n个数字

下面n个数字表示数列

2个操作

1 [u, v]  k  add

[u,v ]区间 (u点要计算)每隔k个位置,该数字+add

2 pos

询问 pos下标的值(下标从1开始)

思路:

因为k很小, 可以直接存 k[11]

注意查询时, 先找到 pos 所在的 叶子节点

再向上 添加 对应k位置的值

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string>
#include<queue>
#include<string.h>
#include<map>
#include<set>
#include<stack>
#include<vector>
#include<math.h>
#define inf 10000000
#define L(x) (x<<1)
#define R(x) (x<<1|1)
#define Mid(x,y) ((x+y)>>1)
#define ll __int64
using namespace std;
inline ll Min(ll a,ll b){return a>b?b:a;}
inline ll Max(ll a,ll b){return a<b?b:a;} #define N 51000
struct node{
ll l, r;
ll k[11];
}tree[N*16];
ll a[N]; void build(ll l, ll r, ll id){
memset(tree[id].k, 0, sizeof(tree[id].k));
tree[id].l = l, tree[id].r = r; if(l == r) return ; ll mid = Mid(l, r);
build(l, mid, L(id));
build(mid+1, r, R(id));
} void updata(ll l, ll r, ll pos, ll add, ll id){
if(l > r)return ;
if(l == tree[id].l && tree[id].r == r)
{
tree[id].k[pos] += add;
return;
}
ll mid = Mid(tree[id].l, tree[id].r);
if(r<=mid)
updata(l, r, pos, add, L(id));
else if(mid<l)
updata(l, r, pos, add, R(id));
else
{
updata(l, mid, pos, add, L(id));
updata(l + ((mid-l)/pos+1)*pos,r,pos, add, R(id));
}
} ll find(ll pos){
ll id = 1;
while(1){
if(tree[id].l == tree[id].r) return id; ll mid = Mid(tree[id].l, tree[id].r);
if(pos <= mid) id = L(id);
else id = R(id);
}
} ll query(ll pos, ll id, ll num){
for(ll i =1;i<11 ;i++)
if((pos-tree[id].l) % i==0)
num += tree[id].k[i]; if(id == 1) return num;
return query(pos, id/2, num);
} int main(){
ll i, j, n, que;
ll u, v, mod, add;
while(~scanf("%I64d",&n)){ for(i=1;i<=n;i++)scanf("%I64d",&a[i]);
build(1, n, 1);
scanf("%I64d",&que);
while(que--){
scanf("%I64d",&i);
if(i==2)
{
scanf("%I64d",&j);
printf("%I64d\n",query(j ,find(j), a[j]));
}
else
{
scanf("%I64d %I64d %I64d %I64d",&u,&v,&mod,&add);
updata(u, v, mod, add, 1);
}
}
}
return 0;
}
/*
10
0 0 0 0 0 0 0 0 0 0
99
1 1 10 2 5
2 1
2 2
2 3
2 4
2 5
2 9
2 10
1 3 6 3 10
2 3
2 4
2 5
2 6 ans:
5
0
5
0
5
5
0
15
0
5
10 */

HDU 4267 线段树 离散点区间更新, 自叶子节点至根单点查询的更多相关文章

  1. hdu 1556:Color the ball(线段树,区间更新,经典题)

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  2. hdu 4267 线段树间隔更新

    A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  3. HDU 1556 Color the ball(线段树:区间更新)

    http://acm.hdu.edu.cn/showproblem.php?pid=1556 题意: N个气球,每次[a,b]之间的气球涂一次色,统计每个气球涂色的次数. 思路: 这道题目用树状数组和 ...

  4. hdu 1698:Just a Hook(线段树,区间更新)

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  5. UVA 12436-Rip Van Winkle's Code(线段树的区间更新)

    题意: long long data[250001]; void A( int st, int nd ) { for( int i = st; i \le nd; i++ ) data[i] = da ...

  6. hdu1698线段树的区间更新区间查询

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  7. zoj3686(线段树的区间更新)

    对线段树的区间更新有了初步的了解... A Simple Tree Problem Time Limit: 3 Seconds      Memory Limit: 65536 KB Given a ...

  8. Color the ball (线段树的区间更新问题)

    N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色.但 ...

  9. ZOJ 2301 Color the Ball 线段树(区间更新+离散化)

    Color the Ball Time Limit: 2 Seconds      Memory Limit: 65536 KB There are infinite balls in a line ...

随机推荐

  1. mysql 锁表查询及其处理

    1.show OPEN TABLES where In_use > 0; 2.show processlist; 3.kill thread_id; 其中 thread_id为processli ...

  2. 第二天(CSS 选择器)

    1.常用的CSS选择器         类型选择器: 例如: p { color : red ; }         后代选择器: 例如: h2 span { font-weight : bold ; ...

  3. html5储存篇(二)

    indexedDB   相对于html5 中提到 web SQL Database,w3c已经明确声明放弃对其的继续支持,开始支持新的客户端数据库 indexedDB ,indexedDB 是一种no ...

  4. codevs 1515 跳 贪心+lucas

    题目链接 一个人初始在(0, 0), 想到(n, m)去, 没到一个格子, 花费的值为C(n, m), 求最小值. C(n, m)的定义为, 如果n==0||m==0, 则为1, 否则C(n, m) ...

  5. java时间验证工具

    可以验证2014-02-21这种错误

  6. Aone新拉分支

    1.进入Aone新建项目 2.测试人员填huyangjun和husong 3.进入后拉分支 4.弄个日常普通环境 5.吧环境跑起,绑定Host就可以

  7. Webx pull service

    1.概述 pull service的功能是将对象置入模板中.被pull service放到模板中的对象,不需要应用程序的干预即可直接使用.如果模板没有用到某个对象,则不会产生创建该对象的开销.看起来, ...

  8. android搭建环境错误 daemon not running. starting it now on port 5037 ADB server didn't ACK

    android搭建环境错误 daemon not running. starting it now on port 5037 ADB server didn't ACK ADB server didn ...

  9. HDU 3328 Flipper

    题解:直接建n个栈,模拟过程即可…… #include <cstdio> #include <cstring> #include <stack> using nam ...

  10. In Action(最短路+01背包)

    In Action Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...