1. 程式人生 > >樹狀陣列 區間修改 差分

樹狀陣列 區間修改 差分

傳送門

// by spli
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;

const int N=500010;
int n,m;
int a[N],c[N];

int lowbit(int x){return x&(-x);}

void add(int pos,int v){
    for(int i=pos;i<=n;i+=lowbit(i))
        c[i]+=v;
}

int
query(int pos){ int ret=0; for(int i=pos;i>=1;i-=lowbit(i)) ret+=c[i]; return ret; } int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;++i) scanf("%d",&a[i]); add(1,a[1]); for(int i=2;i<=n;++i) add(i,a[i]-a[i-1]); int op,x,y,z; while(m--){ scanf
("%d",&op); if(op==1){ scanf("%d%d%d",&x,&y,&z); add(x,z); add(y+1,-z); } else{ scanf("%d",&x); printf("%d\n",query(x)); } } return 0; }

相關推薦

陣列 區間修改

傳送門 // by spli #include<cstring> #include<cstdio> #include<algorithm> #include<iostream> using namespace s

利用實現的陣列區間修改 區間求和

最開始和很不敢相信竟然樹狀陣列還可以區間修改,既然常數這麼小,而且好寫易調的樹狀陣列可以寫區間修改了,那豈不美滋滋? 所以我在網上查了查做法,竟然學會了??? Orz http://blog.c

2018.09.26【TJOI2017】【BZOJ4888】【洛谷P3760】異或和(陣列)(

洛谷傳送門 解析: 額,TJOITJOITJOI連續兩年考了位運算。。。 我還能說什麼。。。 PS:zxyoiPS:zxyoiPS:zxyoi不是天津oieroieroier。 思路: 一般位運算都

陣列 區間修改 區間查詢 講解

原來的值存在a[]裡面,多建立個數組c1[],注意:c1[i]=a[i]-a[i-1]。 那麼求a[i]的值的時候: a[i]=a[i-1]+c1[i]=a[i-2]+c1[i]+c1[i-1]=…..=c1[1]+c1[2]+…+c1[i]。 我們叫c1[]陣列為差分

陣列區間修改+單點求值

以前寫過樹狀陣列區間修改以及區間查詢,現在才發現自己居然不是很會單點查詢,但其實相差不是很多,但還是來填一下坑吧 差分序列:如果我們用 a 陣列表示原序列,則其差分序列為 c 陣列,即 c [ i ]= a [ i ] - a [ i - 1 ]  那麼對於a陣列的區間修

bzoj 3779 重組病毒 —— LCT+陣列(區間修改+區間查詢)

題目:https://www.lydsy.com/JudgeOnline/problem.php?id=3779 RELEASE操作可以對應LCT的 access,RECENTER則是 makeroot; 考慮顏色數,把一條實邊變成虛邊,子樹+1,虛變實子樹-1; 但有換根操作,怎麼維護子樹? 也可以

陣列區間修改+單點查詢 (只能單點查詢)

差分思想: 假設有一個數列  a = { 2, 6, 9, 3, 7 }, 那麼對應的差分陣列b 有   , b = {2, 4, 3, -6, 4 } 因為  b1 + b2 + b3 + ... +  = a1 + (a2 - a1) + (a3 - a2) + ..

【洛谷】線段 陣列區間修改區間查詢

在做一道整體二分的題目的時候遇到了這種區間修改區間查詢的樹狀陣列,感覺用起來手感不錯就拿來了。證明的話,那其實不重要,會用就好了 #include<cstdio> #include<

詳解陣列 區間修改求和

#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define N 102333 using namespace std; typedef long lo

poj 2155 (二維陣列 區間修改 求某點值)

Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 33682  

陣列——區間修改,點查詢

板子題 #include <bits/stdc++.h> #define sf1(a) scanf("%d",&a) #define sf2(a,b) scanf("%d%d"

hdu4970 Killing Monsters 陣列 區間修改

Kingdom Rush is a popular TD game, in which you should build some towers to protect your kingdom from monsters. And now another wave of monsters is coming

3468(水題)陣列區間修改區間查詢模板

U have N integers, A1, A2, ... , AN"C a b c" means adding c to each of Aa, Aa+1, ... , Ab. -10000 ≤ c ≤ 10000."Q a b" means querying the s

陣列 區間修改區間查詢

在這道題因為資料型別卡了我1個多小時之後,我終於把它幹掉了(洛谷3372也可以用這道題的程式碼過,複製過去改一下讀入順序就行,目測codevs的資料比較毒瘤) 樹狀陣列 區間修改+區間查詢 實在是喜歡樹狀陣列啊!好理解,更重要是好寫啊!這次寫寫區間修改區間查詢哈 首

陣列 區間修改

愚蠢的我花了好久好久才看明白他的意思…. 最近不是在弄樹狀陣列嘛,然後這個區間修改,怎麼也想不明白,今天看了一下午部落格,總算弄懂了. 讓我們開始.我會盡量使用常數而不是變數,為了讓你完全清楚. 如果出現公式,都不難,如果你一時看不清,可以拿筆寫一寫,保證

高階陣列——區間修改區間查詢、二維陣列

“高階”資料結構——樹狀陣列!※本文一切程式碼未經編譯,不保證正確性,如發現問題,歡迎指正!1. 單點修改 + 區間查詢最簡單的樹狀陣列就是這樣的:void add(int p, int x){ //給位置p增加x while(p <= n) sum[p] +=

陣列---區間更新(陣列實現)

/* * @Author: Achan * @Date: 2018-10-28 12:55:01 * @Last Modified by: Achan * @Last Modified time: 2018-10-28 19:59:13 */ #incl

陣列-區間查詢+區間修改

聽說樹狀陣列可以支援區間加??今天特地跑去這裡學習了一下,%%%%%%%%%%%%%,下面結合我的理解再講一講 有關樹狀陣列的基礎知識我就不贅述了,想必大家都明白,如果不清楚可以自己百度,畢竟這不是蒟蒻三言兩語就可以講通的 那現在假設你已經會了樹狀陣列的 “ 單點修改,區

POJ3468 A Simple Problem with Interger [數組,]

exce next targe 個數 turn 理解 nes href 題目   題目傳送門    A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K

ZZNU-OJ-2098 : Drink coffee【線段合並區間或者 + 二分索引

因此 愛好 opened 包括 pri 閱讀 hid 大致 val 1 2098 : Drink coffee 2 時間限制:1 Sec 內存限制:256 MiB 3 提交:40 答案正確:14 4 5 提交 狀態 討論區 6 7 題目描述