AcWing 242 乙個簡單的整數問題

2022-09-14 20:21:24 字數 1296 閱讀 7558

原題鏈結

考察:樹狀陣列

確實簡單....就是差分+樹狀陣列即可.本蒟蒻還以為又有什麼神乎其神的優化.....

思路:我們先看第乙個指令:第一類指令形如c l r d,表示把數列中第 l∼r

'>l∼r 個數都加

l∼

r'>l∼

r'>d

'>d

l∼r

'>d

'>l~r區間內+d

l∼r

'>d

'>.l∼

r'>d

'>單看這個操作容易想到差分. 即 修改b[l]與b[r+1]l∼

r'>d

'>l∼

r'>d

'>再看第二個指令:第二類指令形如q x,表示詢問數列中第 x

'>

x 個數的值。

l∼

r'>d

'>x

'>

x

'>

x'>配合上乙個指令的差分陣列.這裡如果考慮差分就是求x的字首和.l∼

r'>d

'>x

'>我們綜合來看,修改b陣列兩個單點的值,求x的字首和.這正好對應樹狀陣列的操作.因此可以用樹狀陣列優化時間複雜度.

1 #include 2 #include 3

using

namespace

std;

4 typedef long

long

ll;5

const

int n = 100010;6

ll b[n],m,n,tr[n];

7char s[2];8

void insert(int l,int r,intx)9

12int lowbit(int

x)13

16void add(int k,int

x)17

20 ll ask(int

x)21

26int

main()

2734

for(int i=1;i<=n;i++) add(i,b[i]);

35while(m--)

3640 scanf("

%d%d

",&r,&x);

41 add(l,x); add(r+1,-x);42}

43return0;

44 }

acwing 242 乙個簡單的整數問題

給定長度為n的數列a,然後輸入m行操作指令。第一類指令形如 c l r d 表示把數列中第l r個數都加d。第二類指令形如 q x 表示詢問數列中第x個數的值。對於每個詢問,輸出乙個整數表示答案。輸入格式 第一行包含兩個整數n和m。第二行包含n個整數a i 接下來m行表示m條指令,每條指令的格式如題...

Acwing 242 乙個簡單的整數問題

給定長度為n的數列a,然後輸入m行操作指令。第一類指令形如 c l r d 表示把數列中第l r個數都加d。第二類指令形如 q x 表示詢問數列中第x個數的值。對於每個詢問,輸出乙個整數表示答案。輸入格式 第一行包含兩個整數n和m。第二行包含n個整數a i 接下來m行表示m條指令,每條指令的格式如題...

一天乙個演算法題 簡單的 求乙個整數的反序列整數。

例如 現在有整數1234,輸出4321整數,問題摘自 演算法實現的不夠好.package com.jue.numberreverse public class numberreverse public static int getreversedatanumber int old int newda...