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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

2018蓝桥模拟赛·天上的星星 暴力|二维树状数组

發布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2018蓝桥模拟赛·天上的星星 暴力|二维树状数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在一個星光摧殘的夜晚,蒜頭君一顆一顆的數這天上的星星。

蒜頭君給在天上巧妙的畫了一個直角坐標系,讓所有的星星都分布在第一象。天上有?nn?顆星星,他能知道每一顆星星的坐標和亮度。

現在,蒜頭君問自己?qq?次,每次他問自己每個矩形區域的星星的亮度和是多少(包含邊界上的星星)。

輸入格式

第一行輸入一個整數?n(1 \le n \le 50000)n(1n50000)?表示星星的數量。

接下里?nn?行,每行輸入三個整數?x,y,w(0 \le x, y, w\le 2000)x,y,w(0x,y,w2000),表示在坐標?(x,y)(x,y)?有一顆亮度為?ww?的星星。注意一個點可能有多個星星。

接下來一行輸入一個整數?q(1 \le q \le 50000)q(1q50000),表示查詢的次數。

接下來?qq?行,每行輸入四個整數?x_1, y_1, x_2, y_2x1?,y1?,x2?,y2?,其中?(x_1, y_1)(x1?,y1?)?表示查詢的矩形的左下角的坐標,(x_2, y_2)(x2?,y2?)?表示查詢的矩形的右上角的坐標,0 \le x_1 \le x_2 \le 20000x1?x2?20000 \le y_1 \le y_2 \le 20000y1?y2?2000

輸出格式

對于每一次查詢,輸出一行一個整數,表示查詢的矩形區域內的星星的亮度總和。

樣例輸入

5 5 0 6 7 9 7 8 6 13 9 7 1 3 0 19 4 0 8 7 9 0 0 7 10 2 7 10 9 5 4 7 5

樣例輸出

7 32 8 0

給出第一象限下的坐標并給出這個坐標下的值 給我們多個矩形的范圍 求這個

雖然暴力能過

但是樹狀數組 也可以~并且更快~

復雜度O(q*log(x)*log(y))

x,y<=2000

注意邊界要算進去 而且數據不能存在0,0上

#include<bits/stdc++.h> using namespace std; typedef long long ll; ll tre[2010][2010]; void add(int x,int y,int w) {for(int i=x;i<=2001;i+=i&(-i)){for(int j=y;j<=2001;j+=j&(-j)){tre[i][j]+=w;} } ll query(int x,int y){ll sum=0;for(int i=x;i>0;i-=i&(-i)){for(int j=y;j>0;j-=j&(-j)){sum+=tre[i][j]; }return sum; } int main() {int n;ios::sync_with_stdio(0);cin>>n;while(n--){int x,y,w;cin>>x>>y>>w;add(x+1,y+1,w);}int q;cin>>q;while(q--){int lx,ly,rx,ry;cin>>lx>>ly>>rx>>ry;ll ans = query(rx+1,ry+1)-query(rx+1,ly)-query(lx,ry+1)+query(lx,ly); //注意邊要算在矩形內 cout<<ans<<endl; }return 0; }
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的2018蓝桥模拟赛·天上的星星 暴力|二维树状数组的全部內容,希望文章能夠幫你解決所遇到的問題。

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