JZOJ 5402. 【NOIP2017提高A组模拟10.8】God Knows
生活随笔
收集整理的這篇文章主要介紹了
JZOJ 5402. 【NOIP2017提高A组模拟10.8】God Knows
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Description
Input
Output
Sample Input
5
3 1 4 5 2
3 4 3 4 1
Sample Output
5
Data Constraint
Solution
很容易想到 O(N2) DP。
設 f[i] 表示當最后一個選 i 為最優答案時的最小代價。
枚舉符合條件的 j 轉移即可。
考慮優化 DP 。
把 (p[i],i) 放到坐標系里,如下圖:
按 i 從小到大的順序加入,那么對于一個 i 能夠轉移的 j ,
顯然就是這個點左邊部分單調下降的一行點。
即以這個點 j 為左下角、點 i 為右上角的矩形中間沒有其他點。
如上圖,對于黃色的點,能轉移的點就是綠色和藍色的點。
那么這就是經典的線段樹維護單調棧的問題。
記錄一個 mn=find(l,mid,rmx) ,那么區間的答案就是
min(mn,find(mid+1,r,rmx))這樣就能保證時間復雜度為 O(N?log2N) 。
Code
#include<cstdio> #include<cctype> using namespace std; const int N=2e5+5,inf=1e9; struct data {int mx,mn; }g[N<<2]; int rmx,qx,qy,ans=inf; int p[N],c[N],f[N]; inline int read() {int X=0,w=0; char ch=0;while(!isdigit(ch)) w|=ch=='-',ch=getchar();while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X; } inline int max(int x,int y) {return x>y?x:y; } inline int min(int x,int y) {return x<y?x:y; } int calc(int v,int l,int r,int val) {if(g[v].mx<val) return inf;if(l==r) return g[v].mx>val?f[g[v].mx]:inf;int mid=l+r>>1;if(g[v<<1|1].mx<val) return calc(v<<1,l,mid,val);return min(g[v].mn,calc(v<<1|1,mid+1,r,val)); } int find(int v,int l,int r,int x,int y) {if(x<=l && r<=y){int num=calc(v,l,r,rmx);rmx=max(rmx,g[v].mx);return num;}int mid=l+r>>1;if(y<=mid) return find(v<<1,l,mid,x,y);if(x>mid) return find(v<<1|1,mid+1,r,x,y);int num=find(v<<1|1,mid+1,r,mid+1,y);return min(num,find(v<<1,l,mid,x,mid)); } void change(int v,int l,int r) {if(l==r){g[v].mx=qy;return;}int mid=l+r>>1;if(qx<=mid) change(v<<1,l,mid); else change(v<<1|1,mid+1,r);g[v].mn=calc(v<<1,l,mid,g[v<<1|1].mx);g[v].mx=max(g[v<<1].mx,g[v<<1|1].mx); } int main() {int n=read();for(int i=1;i<=n;i++) p[i]=read();for(int i=1;i<=n;i++) c[i]=read();for(int i=1;i<=n<<2;i++) g[i].mn=inf;for(int i=1;i<=n;i++){rmx=0;int num=find(1,1,n,1,p[i]);f[i]=(num<inf?num:0)+c[i];qx=p[i],qy=i;change(1,1,n);}for(int i=n,num=0;i;i--)if(p[i]>num) num=p[i],ans=min(ans,f[i]);printf("%d",ans);return 0; }總結
以上是生活随笔為你收集整理的JZOJ 5402. 【NOIP2017提高A组模拟10.8】God Knows的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BZOJ 2957: 楼房重建
- 下一篇: JZOJ 5574. 【NOI2018模