BZOJ 1537 cdq分治
2017-03-08 21:26
323 查看
思路:
我只是想写一下cdq……
二维偏序
一维排序 一维cdq分治
(我忘了归并排序怎么写了,,,)
写了个sort…
复杂度是O(nlog^2n)
我只是想写一下cdq……
二维偏序
一维排序 一维cdq分治
(我忘了归并排序怎么写了,,,)
写了个sort…
复杂度是O(nlog^2n)
//By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N=100050; #define int long long int n,m,k,recy ,f ; struct Node{int x,y,p;}node ; bool cmp(Node a,Node b){if(a.x!=b.x)return a.x<b.x;return a.y<b.y;} struct Temp{int op,k,id;Temp(){}Temp(int x,int y,int z){op=x,k=y,id=z;}}temp ; bool Cmp(Temp a,Temp b){if(a.k!=b.k)return a.k<b.k;return a.op>b.op;} void cdq(int l,int r){ if(l>=r){f[l]=max(node[l].p,f[l]);return;} int mid=(l+r)>>1,top=0,maxx=0; cdq(l,mid); for(int i=l;i<=mid;i++)temp[++top]=Temp(1,node[i].y,i); for(int i=mid+1;i<=r;i++)temp[++top]=Temp(0,node[i].y,i); sort(temp+1,temp+1+top,Cmp); for(int i=1;i<=top;i++){ if(temp[i].op)maxx=max(f[temp[i].id],maxx); else f[temp[i].id]=max(f[temp[i].id],maxx+node[temp[i].id].p); } cdq(mid+1,r); } signed main(){ scanf("%lld%lld%lld",&n,&m,&k); for(int i=1;i<=k;i++)scanf("%lld%lld%lld",&node[i].x,&node[i].y,&node[i].p),recy[i]=node[i].y; sort(node+1,node+1+k,cmp); cdq(1,k); for(int i=1;i<=k;i++)f[k]=max(f[k],f[i]); printf("%lld\n",f[k]); }
相关文章推荐
- bzoj 1537 bus|cdq分治
- BZOJ 1537 cdq分治
- BZOJ 3295: [Cqoi2011]动态逆序对 [CDQ分治]
- bzoj 2216: [Poi2011]Lightning Conductor 决策单调性+cdq分治
- BZOJ 2253 纸箱堆叠(CDQ分治)
- bzoj2961【cdq分治】
- BZOJ 3262 陌上花开、HDU 5618 Jam's problem again(三维偏序、cdq分治 + BIT)
- bzoj3295[Cqoi2011]动态逆序对(cdq分治||可持久化线段树)
- [bzoj] 3295 动态逆序对 || CDQ分治
- bzoj 3672: [Noi2014]购票 树上cdq分治
- [BZOJ3939][Usaco2015 Feb]Cow Hopscotch(cdq分治)
- 【BZOJ1492】【NOI2007】货币兑换(动态规划,CDQ分治,Splay)
- cdq分治入门--BZOJ3262: 陌上花开
- bzoj1492 斜率优化|cdq分治
- BZOJ 3262 陌上花开(CDQ分治)
- bzoj3672 [ NOI2014 ] -- 树上CDQ分治 + 斜率优化DP
- bzoj2683 简单题 (cdq分治 + 树状数组)
- CDQ分治简介(洛谷P3810、BZOJ3262)
- bzoj 1176(cdq分治)
- 【BZOJ】2001 [Hnoi2010]City 城市建设 cdq分治——动态最小生成树