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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

(线段树)Just a Hook -- hdu -- 1689

發布時間:2025/3/21 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (线段树)Just a Hook -- hdu -- 1689 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鏈接:

http://acm.hdu.edu.cn/showproblem.php?pid=1698

?

思路:

我的想法很簡單,像上一題一樣從后面向前面來算,前面已經覆蓋的,后面自然不能再來計算了,具體是每次都計算覆蓋的總長度,然后用這次的總長度減上次的總長度,自然就得到了這次覆蓋的長度,可能我的方法不是很好吧!不過這是自己想出來的,再去借鑒一下別人的代碼,多種想法是好的,畢竟是自己做的,因為數據不是很大所以不用離散化就可以

?

?

?

代碼:

1 #include<stdio.h> 2 #include<algorithm> 3 #include<stdlib.h> 4 #include<string.h> 5 using namespace std; 6 7 #define Lson r<<1 8 #define Rson r<<1|1 9 10 const int N = 100005; 11 12 struct Node 13 { 14 int L, R, e; 15 } s[N<<2]; 16 17 struct node 18 { 19 int L, R; 20 int len; //len里面要記錄被覆蓋的長度 21 int Mid() 22 { 23 return (L+R)>>1; 24 } 25 } a[N<<2]; 26 27 void UpDate(int r) 28 { 29 if(a[r].L != a[r].R) 30 a[r].len = a[Lson].len + a[Rson].len; 31 } 32 33 void BuildTree(int r, int L, int R) 34 { 35 a[r].L = L, a[r].R = R; 36 a[r].len = 0; 37 38 if(L==R) return ; 39 40 BuildTree(Lson, L, a[r].Mid()); 41 BuildTree(Rson, a[r].Mid()+1, R); 42 } 43 44 int Insert(int r, int L, int R) 45 { 46 if(a[r].L<=L && a[r].R>=R && a[r].len == a[r].R-a[r].L+1) 47 return a[r].len; 48 if(a[r].L==L && a[r].R==R) 49 { 50 a[r].len = R-L+1; 51 return a[r].len; 52 } 53 54 if(R<=a[r].Mid()) 55 Insert(Lson, L, R); 56 else if(L>a[r].Mid()) 57 Insert(Rson, L, R); 58 else 59 { 60 Insert(Lson, L, a[r].Mid()); 61 Insert(Rson, a[r].Mid()+1, R); 62 } 63 64 UpDate(r); 65 66 return a[r].len; 67 } 68 69 int main() 70 { 71 int t, k=1; 72 scanf("%d", &t); 73 while(t--) 74 { 75 int n, m; 76 scanf("%d%d", &n, &m); 77 78 BuildTree(1, 1, n); 79 80 for(int i=2; i<=m+1; i++) 81 scanf("%d%d%d", &s[i].L, &s[i].R, &s[i].e); 82 83 s[1].L = 1, s[1].R = n, s[1].e = 1; 84 85 86 int sum = 0, z=0, w=0; 87 for(int i=m+1; i>0; i--) 88 { 89 w = z; 90 z = Insert(1, s[i].L, s[i].R); 91 92 sum += (z-w)*s[i].e; 93 94 if(z==n) 95 break; 96 } 97 98 printf("Case %d: The total value of the hook is %d.\n", k++, sum); 99 100 } 101 return 0; 102 }

?

代碼:

1 #include<stdio.h> 2 #include<math.h> 3 #include<string.h> 4 #include<algorithm> 5 using namespace std; 6 #define Lson root<<1,L,tree[root].Mid() 7 #define Rson root<<1|1,tree[root].Mid()+1,R 8 9 const int maxn = 100005; 10 11 struct Hook{int l, r, z;}hook[maxn]; 12 struct Tree{ 13 int L, R; 14 int isCover;//等于1的時候被覆蓋,等于2的時候區間下面有被覆蓋的 15 int Mid(){return (L+R)/2;} 16 int Len(){return (R-L+1);} 17 }tree[maxn*4]; 18 19 void Build(int root, int L, int R) 20 { 21 tree[root].L = L, tree[root].R = R; 22 tree[root].isCover = false; 23 24 if(L == R)return ; 25 26 Build(Lson); 27 Build(Rson); 28 } 29 void Up(int root) 30 { 31 if(tree[root].L != tree[root].R) 32 if(tree[root<<1].isCover == 1 && tree[root<<1|1].isCover == 1) 33 tree[root].isCover = 1; 34 } 35 int Insert(int root, int L, int R) 36 { 37 if(tree[root].isCover == 1)return 0; 38 39 if(tree[root].L == L && tree[root].R == R && !tree[root].isCover) 40 { 41 tree[root].isCover = 1; 42 return tree[root].Len(); 43 } 44 tree[root].isCover = 2; 45 46 int ans = 0; 47 48 if(R <= tree[root].Mid()) 49 ans = Insert(root<<1, L, R); 50 else if(L > tree[root].Mid()) 51 ans = Insert(root<<1|1, L, R); 52 else 53 ans = Insert(Lson)+Insert(Rson); 54 55 Up(root); 56 57 return ans; 58 } 59 60 int main() 61 { 62 int i, T, t=1; 63 64 scanf("%d", &T); 65 66 while(T--) 67 { 68 int N, M; 69 70 scanf("%d%d", &N, &M); 71 Build(1, 1, N); 72 73 for(i=1; i<=M; i++) 74 scanf("%d%d%d", &hook[i].l, &hook[i].r, &hook[i].z); 75 76 int ans = N; 77 78 for(i=M; i>0; i--) 79 { 80 int len = Insert(1, hook[i].l, hook[i].r); 81 ans = ans - len + len * hook[i].z; 82 } 83 84 printf("Case %d: The total value of the hook is %d.\n", t++, ans); 85 } 86 87 return 0; }

?

轉載于:https://www.cnblogs.com/YY56/p/4692221.html

總結

以上是生活随笔為你收集整理的(线段树)Just a Hook -- hdu -- 1689的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 夜夜操狠狠干 | 在线免费看毛片 | 人妻 丝袜美腿 中文字幕 | 日本少妇一区二区 | 亚洲成a人无码 | 国产精品地址 | 91蜜桃视频| 一级黄色片在线 | 涩色视频 | 深夜视频一区二区三区 | 欧美日韩二区三区 | 巨乳在线播放 | 亚洲色视频 | 一卡二卡三卡在线观看 | 欧美巨大荫蒂茸毛毛人妖 | 毛片你懂的 | 91视频网页 | 国产综合视频 | 无码人妻精品一区二区蜜桃网站 | 成人一区二区三区视频 | 一乃葵在线| 91在线视频在线观看 | 2020自拍偷拍 | 99久久精品免费看国产 | 亚洲第三十七页 | 91麻豆视频在线观看 | 久久婷五月天 | caoporn免费在线 | 久久国产亚洲 | av手机版 | 骚婷婷| 91久久精品国产91久久性色tv | 三级黄色视屏 | 东北少妇不戴套对白第一次 | 亚洲最新在线观看 | 欧美又黑又粗 | 国产亚洲精品久久久久久打不开 | 国产精品久久久久久久裸模 | 日韩第一区 | 欧美一级做性受免费大片免费 | 波多野结衣不卡视频 | 又粗又大又硬毛片免费看 | 久久免费看毛片 | a毛片网站 | youjizz自拍| 中文字幕精品在线 | 北条麻妃一区二区三区四区五区 | 精品欧美一区二区三区久久久 | 免费成人av在线播放 | 中文字幕精品久久久久人妻红杏1 | 国精品无码人妻一区二区三区 | 国产成人精品片 | 日韩图片一区 | 加勒比在线免费视频 | 狠狠干五月天 | 久久免费看少妇高潮 | 国产三级久久久 | 秋霞影院午夜丰满少妇在线视频 | 一本大道伊人av久久综合 | 亚洲精品久久久久久一区二区 | 熟妇人妻无码xxx视频 | 国产一区二区精品在线 | 波多野结衣精品在线 | 奇米影视欧美 | 天天天天色| 爱操av| 那个网站可以看毛片 | 欧美午夜精品一区二区蜜桃 | 久久最新 | 深爱五月激情五月 | 国产真人无码作爱视频免费 | 国产精品一区二区三区久久 | 亚洲欧美一区二区视频 | 久久九九国产视频 | 黄色a级大片 | 自拍第一区| 在线播放日韩 | 日本午夜网| 亚洲清纯唯美 | 欧美三级图片 | 国产一区二区在线播放 | 波多野结衣91 | 91精品婷婷国产综合久久竹菊 | 欧美顶级毛片在线播放 | 国产精品免费大片 | 欧美成人一区二区视频 | 丝袜ol美脚秘书在线播放 | 一区二区三区日韩欧美 | 天天摸日日摸狠狠添 | a无一区二区三区 | 欧美大肚乱孕交hd孕妇 | 影音先锋中文在线 | 亚洲精品福利视频 | 国产高清精品在线观看 | 成都免费高清电影 | 久久99久久99精品免视看婷婷 | 97精品久久久 | 黑人与日本少妇 | 国产在线精品一区二区三区 |