用單調棧求出left right
可以發現每個點的貢獻是關於left right的分段函式
然後就是分段函式累加求和
當時打的線段樹
看了題解漲姿勢了 可以差分 做到o(n)
#include#include#includeusing namespace std;
typedef pairabcd;
typedef long long ll;
inline char nc()
return *p1++;
}inline void read(int &x)
const int n=1000005;
const ll p=998244353;
ll a[n<<2],b[n<<2];
ll ia,ib; int ql,qr;
inline void modify(int rt,int l,int r)
int mid=(l+r)>>1;
if (ql<=mid)
modify(rt<<1,l,mid);
if (qr>mid)
modify(rt<<1|1,mid+1,r);
}int t; ll ret;
inline void query(int rt,int l,int r)
int n,a[n];
int stack[n],pnt;
int left[n],right[n];
ll ans;
int main()
a[n+1]=1<<30;
pnt=0; stack[++pnt]=n+1;
for (int i=n;i;i--)
for (int i=1;i<=n;i++)
for (int i=1;i<=n;i++)
printf("%lld\n",ans);
return 0;
}
uoj 213 UNR 1 爭奪聖杯 單調棧
給出乙個長度為n的序列a,對於乙個m,定義該序列的價值為a 1 到a m 的最大值 a 2 到a m 1 的最大值 a n m 1 到a n 的最大值。求當m取 1,n 時對應的價值。n 106n 10 6考慮每個元素對答案的貢獻。當取最大值時,我們把權值看做第一關鍵字,下標看做第二關鍵字,這樣每個...
UNR 1 奇怪的線段樹
一道好題,感覺解法非常自然。首先我們只需要考慮一次染色最下面被包含的那些區間,因為把無解判掉以後只要染了乙個節點,它的祖先也一定被染了。然後發現一次染色最下面的那些區間一定是一段連續的左兒子 一段連續的右兒子。證明的話可以看官方題解,感性理解的話不難,同時,任意一段連續的左兒子 右兒子也對應乙個區間...
單調棧 線段樹
sequence 時間限制 c c 3秒,其他語言6秒 空間限制 c c 524288k,其他語言1048576k 64bit io format lld your are given two sequences a1 na a1 n and b1 nb b1 n you need to answe...