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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Vijos p1165 火烧赤壁 离散化+单调栈

發布時間:2025/7/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vijos p1165 火烧赤壁 离散化+单调栈 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:https://vijos.org/p/1165

題意:輸入n(n <= 20,000)段線段的端點,問所有線段的長度總和為多少?

input:

3

-1 1

5 11

2 9

output:

11

思路:將左右端點分成一個一個的點,并且標記輸入的id.即弄成一個pair;排序之后模擬加點,左端點直接入棧,右端點若是棧頂端點對應的右端點時,棧頂元素出棧,那這時是否需要更新總長度呢?并不需要。如2 11 ,7 8,棧內為2,7.當前的右端點8對應的左端點為7,然而都在[2,11]內,所以出棧即可;但是如果是樣例中的,當棧內為2,5.當前的右端點為9時,不要任何操作嗎?不是的,這時要將2的左端點標記下,即表示這個區間已經掃過了,只是最后大的區間可能會用到2這個更小的左區間;同時也知道了什么時候需要更新總長度,即區間的連接完整的時候,即p = 0時更新;

#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; #define rep0(i,l,r) for(int i = (l);i < (r);i++) #define rep1(i,l,r) for(int i = (l);i <= (r);i++) #define rep_0(i,r,l) for(int i = (r);i > (l);i--) #define rep_1(i,r,l) for(int i = (r);i >= (l);i--) #define inf 0x7fffffff #define pow(a) (a)*(a) typedef long long ll; template<typename T> void read1(T &m) {T x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}m = x*f; } template<typename T> void read2(T &a,T &b){read1(a);read1(b);} template<typename T> void read3(T &a,T &b,T &c){read1(a);read1(b);read1(c);} typedef pair<int,int> PII; #define A first #define B second #define MK make_pair const int MAXN = 20020<<1; int d[MAXN],stk[MAXN],val[MAXN]; PII v[MAXN]; int main() {int p = 0,n;read1(n);n <<= 1;for(int i = 0;i < n;i += 2){read2(v[i].A,v[i+1].A);if(v[i].A > v[i+1].A) swap(v[i].A,v[i+1].A);v[i].B = i;v[i+1].B = i+1;}sort(v,v+n);ll ans = 0;rep0(i,0,n){if((v[i].B&1) == 0) stk[++p] = v[i].B,val[p] = v[i].A;else{if(v[i].B-1 == stk[p]){p--;while(p && d[stk[p]]) p--;}if(!p) ans += v[i].A - val[1];else d[v[i].B^1] = 1;}}printf("%lld\n",ans);return 0; }

?

轉載于:https://www.cnblogs.com/hxer/p/5295409.html

總結

以上是生活随笔為你收集整理的Vijos p1165 火烧赤壁 离散化+单调栈的全部內容,希望文章能夠幫你解決所遇到的問題。

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