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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

洛谷模拟赛 数据结构

發布時間:2025/5/22 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷模拟赛 数据结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目背景

引言

數據結構學的好,未來工作沒煩惱。

Edgration 是一個喜歡亂搞數據結構的蒟蒻(以下簡稱edt),有一天,他作死想去刁難一下dalao:

edt想求一種數據結構,使得可以實現區間加,求出某一區間大于k的元素的個數

dalao1:sb線段樹

dalao2:sb分塊

dalao3:sb平衡樹

edt: 不行,那就加上取模,求區間取膜mod后大于MIN小于MAX的元素個數

dalao1:線段樹&……¥#&……%……&*&%¥

dalao2:sb分塊 &%¥……%#¥#&……&*

dalao3:*&……%&¥LCT維護SBT水題 &……%&……%

edt:那不僅取模,每個數乘上數組下標再取模

dalao:¥%¥¥&*(#¥% 嘰里呱啦嘰里呱啦

edt:不行,在把取模的值丟到一棵樹上,維護一棵仙人掌乘積方差的最小極差

dalao:替罪羊樹上用sb塊狀鏈表維護Toptree上的最小費用最大流和可持久化仙人掌,算出來在基爾霍夫矩陣中反演后跑一遍fft維護的插頭DP就好了,給我三分鐘輕松水過。。

edt:mmp

題目描述

蒟蒻Edt把這個問題交給了你 ———— 一個精通數據結構的大犇,由于是第一題,這個題沒那么難。。

edt 現在對于題目進行了如下的簡化:

最開始的數組每個元素都是0

給出nn,optopt,modmod,minmin,maxmax,modmod在int范圍內

操作AA,QQ

AA:?LL,RR,XX?表示把[l,R][l,R]這個區間加上XX

(數組的從L到R的每個元素都加上X)

QQ:?LL,RR?表示詢問[L,R][L,R]這個區間中元素T滿足?min<=(T*imin<=(T?i%mod)<=maxmod)<=max?的 T這樣的數的個數(i是數組下標)

(元素的值*數組下標%mod在min到max范圍內)

由于 edt 請來了一位非三次元的倉鼠,他幫你用延后了部分問題,將這些詢問打入了混亂時空,你的詢問操作不會超過1000次,不幸的是,對于延后的詢問操作可能有很多次(小于1e7次),但是保證這些延后的詢問操作之后不會再次有修改操作

(就是在最后會有很多次詢問,但不會進行修改)

輸入輸出格式

輸入格式:

?

給出n,opt,mod,min,max表示序列大小,操作次數,取膜,最小值,最大值

下面opt行,給出

AA:?LL,RR,XX表示區間加,保證X在int范圍內(<2147483647)

QQ:LL,RR表示區間查詢滿足條件的個數

再給出一個FinalFinal值,表示后面有FinalFinal個詢問

下面FinalFinal行,給出

LL,RR表示詢問區間[L,R][L,R]表示詢問[L,R][L,R]之間滿足條件的個數

?

輸出格式:

?

每行對于每個QQ操作輸出QQ個數表示每次詢問的值,

下面FinalFinal行表示FinalFinal個詢問的值

?

輸入輸出樣例

輸入樣例#1:?復制 3 2 4 0 2 A 1 3 5 Q 2 3 5 1 3 2 3 1 1 2 2 3 3 輸出樣例#1:?復制 1 2 1 1 1 0 輸入樣例#2:?復制 17 25 4098 310 2622 A 10 16 657212040 A 4 15 229489140 A 1 2 -433239891 A 3 12 532385784 A 10 17 56266644 A 8 10 10038874 A 6 9 13084764 A 4 5 -9206340 Q 2 8 A 2 4 -43223955 A 6 9 31478706 A 2 4 189818310 A 2 8 179421180 A 2 8 40354938 Q 8 14 A 3 6 57229575 A 6 13 132795740 A 2 17 14558022 A 14 15 -552674185 A 5 11 -1104138 Q 2 12 Q 1 14 A 3 9 524902182 A 8 12 114291440 A 3 7 107531442 1 11 12 輸出樣例#2:?復制 3 6 7 8 2 輸入樣例#3:?復制 20 3 4317 1020 2232 A 8 15 -434078222 A 1 2 54988154 A 13 19 81757858 15 7 11 3 5 3 9 6 9 9 13 6 19 1 20 3 5 3 10 1 7 2 14 6 10 2 3 2 3 10 12 輸出樣例#3:?復制 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0

說明

樣例說明

給出樣例1的解釋:

樣例1中,aa數組修改為55,55,55

每個a[i]*ia[i]?i%44?的值為11,22,33

對于Final的詢問

詢問[1[1,3]3]中大于等于0小于等于2的個數為2個

剩下的詢問類似

題目說明

注意:

1.關于負數取模問題,請以 c++ 的向0取整為標準,即如:

[?-7?7%3 = -13=?1?] [?77%3 = 13=1?]

2.一共會有50個測試點,每個點分值為2分。

因為測試點數較多,請oier們自覺地不要故意多次提交來卡評測機,出題人 edt 在這里表示由衷的感謝

數據范圍

如果你不能作對所有點,請嘗試獲得部分分,所有數據都是隨機生成

不要往數據結構方面想,其實是一道簡單的暴力題

我們發現,在前面的操作中,詢問很少,大多是修改

后面很多操作都是詢問

也就是說,只要后面做到O(1)詢問

前面O(1)修改,O(1~n)詢問就行了

修改直接差分數組,查詢時加一遍O(n)來判斷

1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 typedef long long lol; 7 lol n,q,Mod,Min,Max,a[100001],sum[100001]; 8 char s[101]; 9 lol l,r,now,ans; 10 int main() 11 {lol x,i; 12 cin>>n>>q>>Mod>>Min>>Max; 13 while (q--) 14 { 15 scanf("%s %lld%lld",s,&l,&r); 16 if (s[0]=='A') 17 { 18 scanf("%lld",&x); 19 a[l]+=x;a[r+1]-=x; 20 } 21 else 22 { 23 now=0,ans=0; 24 for (i=1;i<=r;i++) 25 { 26 now+=a[i]; 27 if (i>=l&&(now*i)%Mod>=Min&&(now*i)%Mod<=Max) ans++; 28 } 29 printf("%d\n",ans); 30 } 31 } 32 now=0; 33 for (i=1;i<=n;i++) 34 { 35 now+=a[i]; 36 if ((now*i)%Mod>=Min&&(now*i)%Mod<=Max) sum[i]=1; 37 else sum[i]=0; 38 sum[i]+=sum[i-1]; 39 } 40 cin>>q; 41 while (q--) 42 { 43 scanf("%lld%lld",&l,&r); 44 printf("%lld\n",sum[r]-sum[l-1]); 45 } 46 }

?

轉載于:https://www.cnblogs.com/Y-E-T-I/p/7748312.html

總結

以上是生活随笔為你收集整理的洛谷模拟赛 数据结构的全部內容,希望文章能夠幫你解決所遇到的問題。

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