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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NYOJ 士兵杀敌(四) 树状数组

發布時間:2025/3/16 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NYOJ 士兵杀敌(四) 树状数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

士兵殺敵(四)

時間限制:2000?ms ?|? 內存限制:65535?KB 難度:5 描述

南將軍麾下有百萬精兵,現已知共有M個士兵,編號為1~M,每次有任務的時候,總會有一批編號連在一起人請戰(編號相近的人經常在一塊,相互之間比較熟悉),最終他們獲得的軍功,也將會平分到每個人身上,這樣,有時候,計算他們中的哪一個人到底有多少軍功就是一個比較困難的事情,軍師小工的任務就是在南將軍詢問他某個人的軍功的時候,快速的報出此人的軍功,請你編寫一個程序來幫助小工吧。

假設起始時所有人的軍功都是0.

輸入
只有一組測試數據。
每一行是兩個整數T和M表示共有T條指令,M個士兵。(1<=T,M<=1000000)
隨后的T行,每行是一個指令。
指令分為兩種:
一種形如
ADD 100 500 55 表示,第100個人到第500個人請戰,最終每人平均獲得了55軍功,每次每人獲得的軍功數不會超過100,不會低于-100。
第二種形如:
QUERY 300 表示南將軍在詢問第300個人的軍功是多少。
輸出
對于每次查詢輸出此人的軍功,每個查詢的輸出占一行。
樣例輸入
4 10 ADD 1 3 10 QUERY 3 ADD 2 6 50 QUERY 3
樣例輸出
10 60 好了,什么都不說了,看代碼吧: 01.#include<stdio.h>02.#include<string.h>03.int?a[1000001];04.int?M;05.int?lowbit(int?i)06.{07.return?i&(-i);08.}09.?10.void?update(int?i,int?num)11.{12.while(i>0)13.{14.a[i]+=num;15.i-=lowbit(i);16.}17.}18.?19.int?sum(int?i)20.{21.int?s=0;22.while(i<=M)23.{24.s+=a[i];25.i+=lowbit(i);26.}27.return?s;28.}29.?30.int?main()31.{32.int?T,st,end,k,i;33.char?cmd[10];34.scanf("%d%d",&T,&M);35.for(i=0;i<T;++i)36.{37.scanf("%s",cmd);38.if(cmd[0]=='A')39.{40.scanf("%d%d%d",&st,&end,&k);41.update(end,k);????????//先向1~end之間加k42.update(st-1,-k);??????//再向1~st-1之間加-k,即減k,因為有可能不是從1更新的43.}44.else45.{46.scanf("%d",&k);47.printf("%d\n",sum(k));??????//輸出第k個人的軍工48.}49.}50.return?0;51.}
與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的NYOJ 士兵杀敌(四) 树状数组的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。