這題相比起歷史研究,有乙個十分重要的條件
ai這句話什麼意思呢?<=bj
就是說,任意兩個操作,只有相離和內含兩個關係
這啟示我們,如果我們把最近乙個包含關係連邊的話,他是一棵樹
比如說,三個詢問(1,3)(1,2)(1,1)
我們可以這麼連邊(1,3)->(1,2)->(1,1)
這樣的話就是一棵樹了,是吧
然後我們就是在樹上面考慮這個問題
其實就是樹上每個點有個l,r
然後問我們這一段怎麼搞
當然他有很多孩子
這種問題,很明顯,是可以將孩子並到父親那裡去的
那怎麼搞呢?
dsu on tree!
時間複雜度和做法在上面都有了,我就不再贅述了
於是,就可以在nl
ogn 的複雜度裡面優秀地解決這個題了!
至於怎麼建樹,一開始想的是按長度排序,然後用乙個線段樹維護這個區間要連向誰
但後來採取了乙個單調棧的方法
就是,我們按l為第一關鍵字,r為第二關鍵字,第乙個公升序,第二個降序
然後搞一搞就好了。。具體看**。。
當然,其實如果你寫線段樹合併的話,我不知道可不可以啊。。反正沒有dsu on tree好寫吧。。
最後這題要卡常。。我優化了好一會,才10s卡過。。
資料生成器(你可以先生成一堆一定是包含的,然後再再裡面隨機):
#include
using namespace std;
int l[1000000],r[1000000];
int tot=0;
int n=550000,t=400000;
void solve (int l,int r)
int main()
code:
#include
#include
#include
#include
#include
using
namespace
std;
typedef
long
long ll;
const
int n=600005*2;
int n,q;
int a[n];
struct qq
s[n];
ll ans[n];
struct qt
e[n];int num,last[n];
bool cmp (qq a,qq b)
stack
s;int son[n],tot[n];
void dfs1 (int x)
init(s[x].id,s[u].id);
s.push(u);
}tp=s[1].id;
sort(s+1,s+1+q,cmpi);
dfs1(tp);
}int h[n];//這個東西出現了多少次
int cnt;
int cnt1[n];//清0標記
ll lalal;//當前的答案是什麼
int b[n];//這個數其實是什麼
void add (int x)
h[x]++;
ll t=(ll)h[x]*b[x];
if (t>lalal) lalal=t;
}void change (int x)
else
}void dfs (int x)//哪乙個點,他是不是重兒子
if (son[x]!=0) dfs(son[x]);
lalal=ans[son[x]];
change(x);
ans[x]=lalal;
}void lsh ()
else
if (b[mid]>a[u]) r=mid-1;
else
if (b[mid]1;}}
}inline
int read()
while(ch>='0'&&ch<='9')
return x*f;
}int main()
lsh();
for (int u=1;u<=q;u++)
bt();
dfs(tp);
for (int u=1;u<=q;u++) printf("%lld\n",ans[u]);
return
0;}
504 七進製數
題目描述 給定乙個整數,將其轉化為7進製,並以字串形式輸出。示例 1 輸入 100 輸出 202 示例 2 輸入 7 輸出 10 注意 輸入範圍是 1e7,1e7 方法1 主要思路 1 首先確定輸入值的絕對值,然後對絕對值使用 7 進行分解,將分解後的得到的字串,根據原來數字的正負,決定是否在字串的...
nginx http post請求返回504報錯
http post請求後,返回訊息碼為504 504錯誤代表閘道器超時 gateway timeout 是指伺服器作為閘道器或 但是沒有及時從上游伺服器收到請求。伺服器 不一定是 web 伺服器 正在作為乙個閘道器或 來完成客戶 如您的瀏覽器或我們的 checkupdown 機械人 訪問所需 的請求...
nginx tomcat報504超時錯誤
1.今天nginx tomcat報504超時錯誤?1.專案本地不用nginx訪問沒問題 2.今天以前訪問也沒問題 2.nginx配置的有問題了?1.我的nginx以及其他的比如mysql等,都是使用了oneinstack安裝的,預設都做了優化 2.搜尋了一大推 nginx 504 gateway t...