2018湖南省程式設計競賽E題 動態開點線段樹

2021-08-29 22:43:47 字數 920 閱讀 4648

e.grid

省賽時沒寫出這個題,確實是線段樹水平太菜了,現在又想到了這個題,我靠水題。

思路:這個題說白了就是求最大1 到1e9這個區間有多少個點被覆蓋,普通線段樹空間肯定不行,不過可以用動態開點解決,每次更新最多新花幾十個節點的空間,1e5次更新,最多隻需幾百萬的空間足夠,解決了這個問題就是水題了。

#include#includeusing namespace std;

typedef long long ll;

const int maxn=1e6;

int sum[maxn],ls[maxn],rs[maxn];

int sum2[maxn],ls2[maxn],rs2[maxn],cnt,cnt2;

void up(int& o,int l,int r,int ql,int qr)

int m=(l+r)/2;

if(ql<=m)up(ls[o],l,m,ql,qr);

if(qr>m)up(rs[o],m+1,r,ql,qr);

sum[o]=sum[ls[o]]+sum[rs[o]];

}void up2(int& o,int l,int r,int ql,int qr)

int m=(l+r)/2;

if(ql<=m)up2(ls2[o],l,m,ql,qr);

if(qr>m)up2(rs2[o],m+1,r,ql,qr);

sum2[o]=sum2[ls2[o]]+sum2[rs2[o]];

}int main()

for(int i=1;i<=cnt;i++)

sum[i]=ls[i]=rs[i]=0;

for(int i=1;i<=cnt2;i++)

sum2[i]=ls2[i]=rs2[i]=0;

}}

2023年湖南省程式設計競賽E題 最短的名字

解題報告 輸入n個字串,讓你求出可以用來區別這些字串的最少的字首總共有多少個字母。可以區別是指每個字串都取乙個自己的字首,同時保證所有取的這些字首沒有完全相同。這題用字典樹可以做,就是輸入的時候把所有的字串都插入到字典樹中,最後把所有被走過不止一次的節點的值都加起來,每個節點的值表示這個節點被走過多...

2018湖南省大學生程式設計競賽總結

先說戰績,3題銅牌滾粗。比賽開始前五分鐘就發了紙質檔題面,hsx一看發現a題是個水題,立馬就想到了思路 然後比賽開始五分鐘後1發ac,然後hsx去攻雅禮已經a了的d題 看榜發現湖大有個隊第22秒就a了 手速真他媽快 還發現有人a了b題和c題,我看b題,陽哥看c題,hsx攻d題,我讀懂了題意但是沒有什...

2018湖南省賽總結

2018湖南省賽總結 省賽銅牌,有點可惜,被乙個打表題卡了三個小時。其實這題完全可以早點出的。寫一下省賽比賽的心路歷程吧。這個對以後的比賽有用。9點比賽,8.55發的題面。發完題面之後,立馬發現a題是簽到題,立馬丟給zqg寫,很快一發a了a題,之後的題都沒有那麼明顯的簽到,讀完b題之後,和隊友說題意...