1. 程式人生 > >hdu 1166 敵兵佈陣 線段樹

hdu 1166 敵兵佈陣 線段樹

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>

#define lson l, m, rt << 1
#define rson m+1, r, rt << 1 | 1

using namespace std;

const int MAXN = 50010;
int sum[MAXN<<2];

void PushUp(int rt)
{
     sum[rt] = sum[rt<<1] + sum[rt<<1|1];
}

void build(int l, int r, int rt)
{
     if(l == r)
     {
          scanf("%d", &sum[rt]);
          return;
     }

     int m = (l+r)>>1;
     build(lson);
     build(rson);
     PushUp(rt);
}


void UFset(int p, int a, int l, int r, int rt)
{
     if(l == r)
     {
          sum[rt] += a;
          return;
     }
     int m = (l+r) >> 1;
     if(p <= m)
          UFset(p, a, lson);
     else
          UFset(p, a, rson);
     PushUp( rt );
}

int Query(int L, int R, int l, int r, int rt)
{
     if(L <= l && R >= r)
     {
          return sum[rt];
     }

     int m = (l+r) >> 1;
     int ret = 0;
     if(L <= m)
          ret += Query(L, R, lson);
     if(R > m)
          ret += Query(L, R, rson);
     return ret;
}

int main()
{
	int T , n;
	scanf("%d",&T);
	for (int cas = 1 ; cas <= T ; cas ++)
     {
		printf("Case %d:\n",cas);
		scanf("%d",&n);
		build(1 , n , 1);
		char op[10];
		while (scanf("%s",op))
		{
			if (op[0] == 'E')
                    break;
			int a , b;
			scanf("%d%d",&a,&b);
			if (op[0] == 'Q')
                    printf("%d\n",Query(a , b , 1 , n , 1));
			else if (op[0] == 'S')
                    UFset(a , -b , 1 , n , 1);
			else
                    UFset(a , b , 1 , n , 1);
		}
	}
	return 0;
}

相關推薦

hdu 1166 佈陣 線段模板

單結點更新 線段數是二叉搜尋樹,類似區間樹,它在各個節點儲存一條線段(陣列中的一段子陣列),主要用於高效解決連續區間的動態查詢問題,由於二叉結構的特性,它基本能保持每個操作的複雜度為O(logn)。 線段樹的每個節點表示一個區間,子節點則分別表示父節點的左右半區間,例

hdu 1166 佈陣(線段)

C國的死對頭A國這段時間正在進行軍事演習,所以C國間諜頭子Derek和他手下Tidy又開始忙乎了。A國在海岸線沿直線佈置了N個工兵營地,Derek和Tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數C國都掌握的一清二楚,每個工兵營地的人數都有可能發生變動,可能

hdu 1166 佈陣 線段

#include <iostream> #include <cstring> #include <algorithm> #include <cstdio>

HDU 1166 佈陣 線段

C國的死對頭A國這段時間正在進行軍事演習,所以C國間諜頭子Derek和他手下Tidy又開始忙乎了。A國在海岸線沿直線佈置了N個工兵營地,Derek和Tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數C國都掌握的一清二楚,每個工兵營地的人數都有可能發生變動,可

hdu 1166 佈陣(線段點區)

題目大意:   給出初始化的區間值,然後有三種詢問                     Query a b 詢問區間[a,b]值的總和                     Add a b 第a個元素的值加b                     Sub a b

HDU 1166 佈陣 線段

C國的死對頭A國這段時間正在進行軍事演習,所以C國間諜頭子Derek和他手下Tidy又開始忙乎了。A國在海岸線沿直線佈置了N個工兵營地,Derek和Tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數C國都掌握的一清二楚,每個工兵營地的人數都有可能發生變動,可能

HDU 1166-佈陣狀陣列&&線段單點更新】【模板】

C國的死對頭A國這段時間正在進行軍事演習,所以C國間諜頭子Derek和他手下Tidy又開始忙乎了。A國在海岸線沿直線佈置了N個工兵營地,Derek和Tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數C國都掌握的一清二楚,每個工兵營地的人數都有可能發生變動,可

HDU-1166 佈陣狀陣列)

樹狀陣列(Binary Indexed Tree(B.I.T))是能夠完成下述操作的資料結構。 給一個初始值全為0的數列a1,a2,……,an 給定i,計算a1+a2+…+ai (sum) 給定i和x,執行ai += x (update) 由上圖所知:

POJ 1166-佈陣 (線段裸題)

C國的死對頭A國這段時間正在進行軍事演習,所以C國間諜頭子Derek和他手下Tidy又開始忙乎了。A國在海岸線沿直線佈置了N個工兵營地,Derek和Tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數C國都掌握的一清二楚,每個工兵營地的人數都有可能發生變動,可能

1166 佈陣 線段

C國的死對頭A國這段時間正在進行軍事演習,所以C國間諜頭子Derek和他手下Tidy又開始忙乎了。A國在海岸線沿直線佈置了N個工兵營地,Derek和Tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數C國都掌握的一清二楚,每個工兵營地的人數都有可能發生變動,可

HDU 1166 佈陣線段(單點更新與區間求和)】

C國的死對頭A國這段時間正在進行軍事演習,所以C國間諜頭子Derek和他手下Tidy又開始忙乎了。A國在海岸線沿直線佈置了N個工兵營地,Derek和Tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數C國都掌握的一清二楚,每個工兵營地的人數都有可能發生

hdu 1166 佈陣 (單點更新線段模板)

題目連結:哆啦A夢傳送門 題解:   參考連結:https://www.cnblogs.com/TenosDoIt/p/3453089.html #include<cstdio> #include<algorithm> #include<c

hdu 1166佈陣線段 模板 單點更新加區間查詢)

#include<iostream> #include<cstdio> #include<cstring> #include<cstring> #include<algorithm> using namespac

HDU 1166 佈陣線段模板題)

敵兵佈陣 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 127082    Accepted Submissi

線段(點)簡單題 hdu 1166 佈陣

敵兵佈陣 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 120002    Accepted Submissi

HDU 1166 佈陣線段

C國的死對頭A國這段時間正在進行軍事演習,所以C國間諜頭子Derek和他手下Tidy又開始忙乎了。A國在海岸線沿直線佈置了N個工兵營地,Derek和Tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數C國都掌握的一清二楚,每個工兵營地的人數都有可能發生變動,可能

佈陣(線段HDU 1166)

敵兵佈陣 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 59947 Accepted S

hdu 1166 佈陣線段

C國的死對頭A國這段時間正在進行軍事演習,所以C國間諜頭子Derek和他手下Tidy又開始忙乎了。A國在海岸線沿直線佈置了N個工兵營地,Derek和Tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數C國都掌握的一清二楚,每個工

HDU 1166 佈陣(狀陣列)

 敵兵佈陣   C國的死對頭A國這段時間正在進行軍事演習,所以C國間諜頭子Derek和他手下Tidy又開始忙乎了。A國在海岸線沿直線佈置了N個工兵營地,Derek和Tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數C國都掌握的一清二楚,每個工兵

hdu 1166 佈陣【單點更新 區間查詢】【狀陣列】

敵兵佈陣 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 126415    Accepted Submissi