当前位置: 首页 > news >正文

网站建设编辑部/搜索网站的浏览器

网站建设编辑部,搜索网站的浏览器,西青集团网站建设,哪里有网站建设哪家好CF809D Hitchhiking in the Baltic States CF809D 长度为n的序列{xi},n<3e5,范围在(li,ri)之间&#xff0c;求LIS最长是多长g(i,l)表示前i个数&#xff0c;LIS长度为l&#xff0c;最后一个数最小是多少&#xff08;就是那个单调栈&#xff09;g(i,l)min(g(i-1,l),xi (if ex…

CF809D Hitchhiking in the Baltic States 

CF809D

长度为n的序列{xi},n<=3e5,范围在(li,ri)之间,求LIS最长是多长
g(i,l)表示前i个数,LIS长度为l,最后一个数最小是多少(就是那个单调栈)
g(i,l)=min(g(i-1,l),xi (if exist j g(j,l-1)<x))
关于l是递增的。
虽然不知道xi是多少,

但是可以直接用(li,ri)进行计算!最后一定存在一种方法还原xi

刚好可以把一个g(i-1,l-1)+1->g(i,l)

整个区间往上平移再往右平移,再再最下面插入一个点。

实现时候,用平衡树,直接区间+1,某位置插入一个点

最后平衡树点数即为答案

 

#include<bits/stdc++.h>
#define reg register int
#define il inline
#define fi first
#define se second
#define mk(a,b) make_pair(a,b)
#define numb (ch^'0')
#define pb push_back
#define solid const auto &
#define enter cout<<endl
#define pii pair<int,int>
using namespace std;
typedef long long ll;
template<class T>il void rd(T &x){char ch;x=0;bool fl=false;while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);for(x=numb;isdigit(ch=getchar());x=x*10+numb);(fl==true)&&(x=-x);
}
template<class T>il void output(T x){if(x/10)output(x/10);putchar(x%10+'0');}
template<class T>il void ot(T x){if(x<0) putchar('-'),x=-x;output(x);putchar(' ');}
template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');}namespace Miracle{
const int N=3e5+5;
int n,l[N],r[N];
int tot;
struct node{int ls,rs;int ad;int val;int prio;
}t[2*N];
int nc(int v){++tot;t[tot].val=v;t[tot].prio=rand();t[tot].ad=t[tot].ls=t[tot].rs=0;// cout<<" nc "<<tot<<" : "<<v<<endl;return tot;
}
void pushdown(int x){if(x&&t[x].ad){t[t[x].ls].ad+=t[x].ad;t[t[x].rs].ad+=t[x].ad;t[t[x].ls].val+=t[x].ad;t[t[x].rs].val+=t[x].ad;t[x].ad=0;}
}
void split(int now,int &x,int &y,int k){//<=kif(!now){x=0;y=0;return;}pushdown(now);if(t[now].val<=k){x=now;split(t[now].rs,t[x].rs,y,k);}else{y=now;split(t[now].ls,x,t[y].ls,k);}
}
int dele(int x){pushdown(x);int rt=x;if(!t[x].ls) {// cout<<" delert "<<x<<" "<<t[x].val<<endl;return t[x].rs;}int y=0;while(t[x].ls){// cout<<" ls "<<x<<" las "<<y<<endl;
        pushdown(x);y=x;x=t[x].ls;}// cout<<" dele "<<x<<" "<<t[x].val<<" "<<t[x].ls<<" "<<t[x].rs<<endl;t[y].ls=t[x].rs;return rt;
}
int merge(int x,int y){if(!x||!y) return x+y;pushdown(x);pushdown(y);if(t[x].prio<t[y].prio){t[x].rs=merge(t[x].rs,y);return x;}else{t[y].ls=merge(x,t[y].ls);return y;}
}
int ans=0;
void fin(int x){if(!x) return ;pushdown(x);++ans;fin(t[x].ls);// cout<<" x "<<x<<" : "<<t[x].val<<endl;
    fin(t[x].rs);
}
int main(){srand(19260817);rd(n);for(reg i=1;i<=n;++i){rd(l[i]);rd(r[i]);}int rt=0;for(reg i=1;i<=n;++i){int x,y,p,q;split(rt,x,y,l[i]-1);split(y,p,q,r[i]-1);t[p].ad++;t[p].val++;// if(i==n) {//     // cout<<" qqqq "<<endl;//     fin(q);// }q=dele(q);// if(i==n) {//     // cout<<" qqqq "<<endl;//     fin(q);// }rt=merge(merge(merge(x,nc(l[i])),p),q);// cout<<"finfifn "<<i<<"------------------------"<<endl;// fin(rt);
    }ans=0;fin(rt);ot(ans);return 0;
}}
signed main(){Miracle::main();return 0;
}/*Author: *Miracle*
*/

 

转载于:https://www.cnblogs.com/Miracevin/p/10834195.html

http://www.lbrq.cn/news/1247869.html

相关文章:

  • 住房城乡建设委员会官方网站/做网络推广怎么收费
  • 湖北武汉汉阳区疫情/搜索引擎优化与推广技术
  • 商城小程序建设/网站seo在线诊断
  • 怎么做网站程序/免费b站推广网址有哪些
  • 注册博客域名做视频网站会怎么样/常用网站推广方法及资源
  • 网站技术解决方案的内容/有什么好的网站吗
  • 黄骅港什么时候开海/嘉兴seo外包公司费用
  • 专做女鞋批发的网站/广州引流推广公司
  • 网站做树状结构有什么作用/搜索引擎关键词怎么优化
  • 回老家做PHP网站/seo网络推广机构
  • wordpress后台地址打开空白/seo的关键词无需
  • 做图片为主的网站对服务器的要求/bing搜索引擎下载
  • 做p2p网站/网络小说排行榜
  • 网站二级页怎么做/seo网站关键词优化方法
  • 汨罗住房和城乡建设局网站/深圳全网营销推广平台
  • 做网站费用可以看为广告费用吗/seo云优化公司
  • 用web做网站/品牌线上推广方案
  • 黑龙江网站备案管理局/项目平台
  • 网络公司网站模板/百度优化点击软件
  • 江门市建设工程投标网站/谷歌seo引擎优化
  • 建站平台软件/百度手机导航官方新版
  • 图片在线压缩/外包seo服务收费标准
  • 佛山市seo网站设计工具/百度爱采购竞价
  • 推广方式和渠道/谷歌seo公司
  • 怎么改网站模板/惠州网络营销公司
  • .net做的网站/深圳网站建设资讯
  • 网站的首页设计方案/四川seo快速排名
  • 广告图案大全图片素材/移动端关键词优化
  • 深圳做网站排名价格/市场营销策划公司排名
  • 外贸网站建设推广公司前景如何/北京本地网络推广平台
  • 关于windows虚拟机无法联网问题
  • MongoDB系列教程-教程概述
  • TCPDump实战手册:协议/端口/IP过滤与组合分析指南
  • Rust 实战二 | 开发简易版命令行工具 grep
  • 【Zustand】从复杂到简洁:Zustand 状态管理简化实战指南
  • Java面试深度剖析:从JVM到云原生的技术演进