琥珀色黃昏像糖在很美的遠方,思念跟影子在傍晚一起被拉長……
小 b 帶著 gf 去逛公園,公園一共有 n 個景點,標號為 1 . . . n。景點之間有 m 條路徑相連。
小 b 想選擇編號在一段區間 [l, r] 內的景點來遊玩,但是如果這些景點的誘導子圖形成了環,那麼 gf 將會不高興。
小 b 給出很多個詢問 [x, y],想讓你求有多少個區間 [l, r] 滿足 x ≤ l, r ≤ y 且不會使 gf不高興。
對於 30% 的資料,n, m ≤ 100。
對於另外 10% 的資料,n = m + 1。
對於另外 10% 的資料,n = m
對於 100% 的資料,n, m ≤ 3 × 10^5, xi ≤ yi,不存在重邊、自環,不存在一條邊同時存在於兩個不同的簡單環。
誘導子圖:子圖 g′ = (v′, e′),原圖 g = (v, e)。v′ 是 v 的子集,e′ =
先跑個tarjan搞出所有size>1的環,顯然我們的l和r不能包含這些環裡的最大值和最小值
考慮把每個i作為左端點時最右邊能到達的位置記為r[i],顯然這個r是單調的
可以發現我們實際上要對一整段的max(r[i],r)-i+1求和,於是可以二分出第乙個<=r的位置,前半部分字首和,後半部分等差數列求和即可
對於tarjan的各種寫法我到現在都還很懵。比如這一題我的tarjan寫法和別人不一樣就wa了。。。
#include
#include
#include
#include
#include
#define rep(i,st,ed) for (int i=st;i<=ed;++i)
#define drp(i,st,ed) for (int i=st;i>=ed;--i)
typedef
long
long ll;
const
int inf=
0x3f3f3f3f
;const
int n=
600005
;struct edge e[n*2]
;struct line d[n]
;std:: stack <
int> stack;
int dfn[n]
,low[n]
,r[n]
;int ls[n]
,edcnt=
1,cnt;
ll sum[n]
;bool vis[n]
;int
read()
void
add_edge
(int x,
int y)
; ls[x]
=edcnt;
e[++edcnt]
=(edge)
; ls[y]
=edcnt;
}void
tarjan
(int x,
int fa)
else low[x]
=std::
min(low[x]
,dfn[y]);
if(low[x]
==dfn[x])if
(sum>
1) d[
++cnt]
=(line);}
stack.
push
(x);
} stack.
pop();
}void
dfs(
int now,
int from)
else
if(vis[e[i]
.y]) low[now]
=std::
min(low[now]
,dfn[e[i]
.y]);}
if(low[now]
==dfn[now])if
(size!=
1) d[
++cnt]
=(line);}
}bool
cmp(line a,line b)
intmain
(void
)rep
(i,1
,n)if
(!dfn[i]
)tarjan
(i,0);
// rep(i,1,n) if (!dfn[i]) dfs(i,0);
// printf("%d\n", cnt);
std::
sort
(d+1
,d+cnt+
1,cmp)
;int j=cnt,k=n+1;
drp(i,n,1)
r[i]
=k-1;}
rep(i,
1,n)
for(
int t=
read()
;t--;)
ans=sum[r]
-sum[x-1]
; ans=ans+
1ll*
(1ll
*y-r)*(
1ll*y-r+
1ll)
/2ll
;printf
("%lld\n"
, ans);}
return0;
}
主席樹 HDU5919 CCPC2016長春
題目大意 給乙個長度為n的序列.給q次詢問,每次詢問 l,r l,r l,r 假設裡面有k kk個不同的數.求從左到右第 k2 lceil frac rceil 2k 個不同的數出現的位置.n,q 2e5 n,q leq 2e5 n,q 2e 5題目思路 前置知識點 主席樹求區間不同的數的個數 個人...
hdu5919 主席樹求區間不同數
題目大意 有長度為 n l r 這段區間中所有不同數出現的第乙個位置,按照位置從小到大排完序以後的中間 向上取整 的那個位置是多少?解題思路 把n個元素倒著插進主席樹中,把上次出現的同乙個值的元素的貢獻值 1,新的這個值的貢獻值 1,這樣就可以把這個元素最左側的位置的貢獻保留。查詢區間 l,r 時只...
2019中山紀念中學夏令營 Day1 JZOJ
t1 題目描述 時間限制 1000 ms 空間限制 128000 kb 具體限制 goto problemset 題目描述 wexley最近發現了乙個古老的螢幕遊戲。遊戲的螢幕被劃分成n列。在螢幕的底端,有乙個寬為m列的籃子 m 輸入第一行,兩個整數n m,如題所述 第二行,乙個整數k,表示掉落的蘋...