日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

nyoj123士兵杀敌4-树状数组-改区间查点

發(fā)布時(shí)間:2025/3/16 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nyoj123士兵杀敌4-树状数组-改区间查点 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

士兵殺敵(四)

時(shí)間限制:2000?ms ?|? 內(nèi)存限制:65535?KB 難度:5 描述

南將軍麾下有百萬(wàn)精兵,現(xiàn)已知共有M個(gè)士兵,編號(hào)為1~M,總會(huì)有一批編號(hào)連在一起人請(qǐng)戰(zhàn),最終他們獲得相同軍功,軍師小工的任務(wù)就是在南將軍詢問(wèn)他某個(gè)人的軍功的時(shí)候,快速的報(bào)出此人的軍功,請(qǐng)你編寫(xiě)一個(gè)程序來(lái)幫助小工吧。起始時(shí)所有人的軍功都是0。

輸入
只有一組測(cè)試數(shù)據(jù)。
每一行是兩個(gè)整數(shù)T和M表示共有T條指令,M個(gè)士兵。(1<=T,M<=1000000)
隨后的T行,每行是一個(gè)指令。
指令分為兩種:

ADD 100 500 55 表示,第100個(gè)人到第500個(gè)人請(qǐng)戰(zhàn),最終每人獲得了55軍功,每次每人獲得的軍功數(shù)不會(huì)超過(guò)100,不會(huì)低于-100。

QUERY 300 表示南將軍在詢問(wèn)第300個(gè)人的軍功是多少。
輸出
對(duì)于每次查詢輸出此人的軍功,每個(gè)查詢的輸出占一行。
樣例輸入
4 10 ADD 1 3 10 QUERY 3 ADD 2 6 50 QUERY 3
樣例輸出
10 60

樹(shù)狀數(shù)組,改區(qū)間查點(diǎn)居然用sum是我無(wú)法理解的無(wú)法理解。改點(diǎn)查區(qū)間的sum還是可以理解的。

先記錄一下,日后便于查看。
#include <stdio.h> #include <stdlib.h> int n, C[1000000]; int lowbit(int m) {//得到m二進(jìn)制最低位的1表示的數(shù) return m&(-m);//如1010,其負(fù)數(shù)為: 原碼->反碼0101->補(bǔ)碼0111, &得0010 } void update(int i, int add) {while(i <= n) {C[i] += add;i += lowbit(i);//更新 } } int sum(int i) {int s = 0;while(i > 0) {s += C[i];i -= lowbit(i);}return s; } int main() {int m, x, i = 0, j;char str[9];scanf("%d%d", &m, &n);//n = 0;while(m--) {scanf("%s%d", str, &i);if(str[0] == 'A') {scanf("%d%d", &j, &x);update(i,x);update(j+1,-x);}else printf("%d\n", sum(i));}return 0; }


總結(jié)

以上是生活随笔為你收集整理的nyoj123士兵杀敌4-树状数组-改区间查点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。