大意:給定一列數$a_i$,求滿足下列條件的數對$(x,y)$的數量:$(1)xn$與$a_i=n$是等價的,所以直接將大於n的$a_i$賦為$n$可以避免離散化
#include#include#include
#include
#include
#include
#include
#include
using
namespace
std;
int tree[200500],n,a[200500
];vector
v[200500
];int lowbit(int
x)void add(int pos,int
val)
int query(int
pos)
intmain()
long
long ans=0
; memset(tree,
0,sizeof
(tree));
for (i=1;i<=n;i++)
printf(
"%i64d
",ans);
return0;
}
大意:給定乙個由"a","g","t","c"組成的字串,有如下兩種操作
$1\ x \ c$ :將位置為x的字元替換成c
$2\ l\ r\ e$:給出乙個字串,它的迴圈節是$e$(即這個字串為$ee\ldots$),將它與原字串的子串$[l\ldots r]$進行比較,求出有多少位能夠匹配
本題的關鍵在於$e\leq 10$,所以很多東西要在$e$上做文章
我們可以對每個字元開$10*10$個樹狀陣列(記做$[i][j]$),表示當$e$的長度為$j$時這個字元能處在$e$的第$i$位
樹狀陣列再開兩維記錄當前的元素是什麼以及在原串中的位置
在查詢時,對每乙個字元統計它的貢獻即可
1 #include2 #include3 #include
4 #include5 #include6 #include7 #include8 #include9
using
namespace
std;
10const
int maxn=1e5+10;11
int tree[11][11][5
][maxn],n,q;
12char a[100500
];13 mapmp;
1415
int lowbit(int
x)16
1920
void add(int x,int y,int id,int pos,int
val)
2127}28
29int query(int x,int y,int id,int
pos)
3036
37int
main()
3850
while (q--)
5163 a[x-1]=ch;64}
65else
if (op==2)66
74 printf("
%d\n
",ans);75}
76}77return0;
78 }
一些簡單的樹狀陣列題
大意 給定一列數 a i 求滿足下列條件的數對 x,y 的數量 1 xn 與 a i n 是等價的,所以直接將大於n的 a i 賦為 n 可以避免離散化 include include include include include include include include using nam...
關於樹狀陣列的一些討論
樹狀陣列用於在log n 的時間複雜度修改與詢問字首 相比線段樹更好寫 常數更小 不過侷限性很大 不能用於維護最大最小值之類的情況 最常用的應用 我用過的 大概有 單點修改區間查詢 區間修改單點查詢 區間修改區間查詢 離散化權值求逆序對 以上內容 洛谷金秋講義 上面已經把樹狀陣列定義以及修改查詢方法...
轉 樹狀陣列的一些應用
樹狀陣列 bit,binary indexed tree 以下 1.單點增減 區間求和 思路 c x 表示該點的元素 sum x c 1 c 2 c x int arr maxn inline int sum int x inline void add int x,int n inline int ...