20250302 总结

20250302 总结

A

简化题意:对一个长度为 n n n 的序列 a a a 支持区间加与查询区间 gcd 操作。

思路:首先老师给了个结论,对于 a a a 的一个子序列 a l ∼ a r a_l\sim a_r alar,有:

gcd ⁡ ( a l , a l + 1 , ⋯   , a r ) = gcd ⁡ ( a l , a l + 1 − a l , a l + 2 − a l + 1 , ⋯   , a r − a r − 1 ) \gcd (a_l,a_{l+1},\cdots,a_r)=\gcd (a_l,a_{l+1}-a_l,a_{l+2}-a_{l+1},\cdots,a_r-a_{r-1}) gcd(al,al+1,,ar)=gcd(al,al+1al,al+2al+1,,arar1)

我们把后式进行如下拆分:

gcd ⁡ ( a l , a l + 1 − a l , a l + 2 − a l + 1 , ⋯   , a r − a r − 1 ) = gcd ⁡ ( a l , gcd ⁡ ( a l + 1 − a l , a l + 2 − a l + 1 , ⋯   , a r − a r − 1 ) ) \gcd (a_l,a_{l+1}-a_l,a_{l+2}-a_{l+1},\cdots,a_r-a_{r-1})=\gcd (a_l,\gcd (a_{l+1}-a_l,a_{l+2}-a_{l+1},\cdots,a_r-a_{r-1})) gcd(al,al+1al,al+2al+1,,arar1)=gcd(al,gcd(al+1al,al+2al+1,,arar1))

发现 gcd ⁡ ( a l , a l + 1 − a l , a l + 2 − a l + 1 , ⋯   , a r − a r − 1 ) \gcd (a_l,a_{l+1}-a_l,a_{l+2}-a_{l+1},\cdots,a_r-a_{r-1}) gcd(al,al+1al,al+2al+1,,arar1) 只和 a a a 的差分序列有关。设 b b b a a a 的差分序列,即 b i = a i − a i − 1 b_i=a_i-a_{i-1} bi=aiai1(默认 a 0 a_0 a0 0 0 0),则每次对 a l ∼ a r a_l\sim a_r alar d d d 的操作,只会影响 b l b_l bl b r + 1 b_{r+1} br+1 的值,即 b l ← b l + d , b r + 1 ← b r + 1 − d b_l\gets b_l+d,b_{r+1}\gets b_{r+1}-d blbl+d,br+1br+1d,查询时即求 gcd ⁡ ( b l + 1 , b l + 2 , ⋯   , b r ) \gcd (b_{l+1},b_{l+2},\cdots,b_r) gcd(bl+1,bl+2,,br)。这一部分可用线段树维护,复杂度 O ( n log ⁡ 2 n ) \Omicron (n\log_2 n) O(nlog2n)

剩下的 a l a_l al 怎么求?显然 ∑ i = 1 l b i = ∑ i = 1 l a i − a i − 1 = a l \sum\limits_{i=1}^{l}b_i=\sum\limits_{i=1}^{l}a_i-a_{i-1}=a_l i=1lbi=i=1laiai1=al。我与上一部分分开用树状数组维护的,时间复杂度亦为 O ( n log ⁡ 2 n ) \Omicron (n\log_2 n) O(nlog2n)

细节及难点:没什么难点,注意我们对于修改 a l ∼ a r a_l\sim a_r alar 的操作实际修改了 b l , b r + 1 b_l,b_{r+1} bl,br+1,如果没判 r + 1 ≤ n r+1\le n r+1n 的话建树时需要建到 n + 1 n+1 n+1

B

简化题意:

思路:

细节及难点:

核心代码:

C

简化题意:

思路:

细节及难点:

D

简化题意:

思路:

细节及难点:

E

简化题意:

思路:

细节及难点:

F

简化题意:

思路:

细节及难点:

G

简化题意:

思路:

细节及难点:

import pandas as pd import xarray as xr from cnmaps import get_adm_maps, clip_contours_by_map, draw_maps import matplotlib.pyplot as plt import cartopy.crs as ccrs import cartopy.feature as cfeature from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER import matplotlib.colors as mcolors import matplotlib.patches as mpatches # 读取数据 ds = xr.open_dataset("Z_RADA_C_BABJ_20250302000942_P_DOR_YN_FHCR_SC_1KM_20250302_000000.nc") print(ds) sm_data = ds["CREF"] # 根据实际变量名调整 lat = ds["Lat"] lon = ds["Lon"] time_coverage=ds["time"] minu_group = ds.groupby("time.minute") for group_name, group_ds in minu_group: # 当第一个循环结束时,停止遍历 minu_group print(group_name) break group_ds list_group = list(minu_group) list_group def time_mean(a): return a.mean(dim="time") monthsst = minu_group.map(time_mean) monthsst # 常量 startLon = 98 endLon = 100.15 startLat = 24 endLat = 26 # 使用cnmaps获取保山市边界 baoshan = get_adm_maps(city="保山市", level='市') # level可选'市','县','乡' # 地图白化 fig = plt.figure(figsize=(16, 8)) ax = fig.add_subplot(111, projection=ccrs.PlateCarree()) ax.set_extent([startLon, endLon, startLat, endLat], crs=ccrs.PlateCarree()) colorlevel=[-100,-50,-25,0,25,50,100,]#气温等级 colordict=['#ff0000', '#ff9628','#ffff00','#afff00','#00beff','#800040']#颜色列表 rain_map=mcolors.ListedColormap(colordict)#产生颜色映射 norm=mcolors.BoundaryNorm(colorlevel,rain_map.N)#生成索引 # 绘制土壤湿度数据 cs1= ax.contourf(lon,lat,monthsst,levels=colorlevel,cmap=rain_map,norm=norm,transform=ccrs.PlateCarree(),extend='both') labels=['<-50','-50~-25','-25~0', '0~25','25~50','>90'] #labels=['重旱','中旱', '轻旱','无旱','渍涝'] myLegend=[mpatches.Rectangle((0, 0), 1, 2, facecolor=c) for c in colordict] ax.legend(myLegend, labels,fontsize=9,frameon=False,title='图例',ncol=1, loc='lower left', bbox_to_anchor=(0, -0.01), fancybox=True) # 画县 map_with_country = get_adm_maps(province='云南省', city="保山市", level="县") print(map_with_country) draw_maps(map_with_country, linewidth=0.8, color='#5f5f5f') # 县区 stationIds = pd.read_csv("保山市县区.csv", encoding="gbk") name = stationIds['Sta'] lon = stationIds['Lon'] lat = stationIds['Lat'] lonlat = zip(lon, lat) mapname = dict(zip(name, lonlat)) for key, value in mapname.items(): print("==================", value[0], value[1]) ax.scatter(value[0], value[1], marker='.', s=10, color="k", zorder=3) ax.text(value[0] - 0.04, value[1] + 0.01, key, fontsize=10, color="k") # 添加网格和标注 gl = ax.gridlines(draw_labels=True,linewidth=0.5, color='gray', alpha=0)#网格线颜色、宽度、 gl.xformatter = LONGITUDE_FORMATTER gl.yformatter = LATITUDE_FORMATTER gl.top_labels = False gl.right_labels = False #装饰 plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定中文字体(如黑体) plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题 ax.set_title("保山市3月16日土壤干旱分布图", loc="center", fontsize=14,pad=10) #def add_department_watermark(fig,text): ax.text(0.98, 0.05, "制作单位:保山市气象科技服务中心\n",ha='right', va='bottom', fontsize=8, color='black',transform=ax.transAxes) #fig.text(0.98, 0.02, "制作单位:保山市气象科技服务中心\n",ha='right', va='bottom', fontsize=8, color='black') #fig.text(0.95, 0.03,"Produced by: Energy Analytics Dept | Confidential",ha='right',fontsize=9,color='#666666',alpha=0.7) #切图 bs_map_outline = get_adm_maps(province='云南省',city="保山市", record='first', only_polygon=True) clip_contours_by_map(cs1, bs_map_outline) #map_polygon=get_adm_maps(province='云南省',city="保山市", record='first', only_polygon=True) #clip_contours_by_map(bs, bs_map_outline) #map_polygon = get_adm_maps(province='云南省',city="保山市",record='first', only_polygon=True) plt.savefig('baoshan_soil_moisture_cnmap.png', dpi=800, bbox_inches='tight') plt.show() print("工作完成.") 此代码显示TypeError: cannot directly convert an xarray.Dataset into a numpy array. Instead, create an xarray.DataArray first, either with indexing on the Dataset or by invoking the `to_array()` method.请问怎么解决
03-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值