bzoj 4553: [Tjoi2016&Heoi2016]序列
来源:互联网 发布:电子相册制作软件宝宝 编辑:程序博客网 时间:2024/06/15 06:34
令L[i]表示i可以取到的最小值,R[i]表示i可以取到的最大值。
如果i可以成为子序列中j的前一项,必须满足 i<j a[i]<=L[j] R[i]<=a[j],然后cdq分治
注意分治的写法,不然可能卡成暴力。比较好的办法是把a和L拆成两个东西。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define ll long long
#define inf 1e9
#define eps 1e-10
#define md
#define N 100010
using namespace std;
struct QQ { int a,l,r,id,f;} q[N];
int c[N];
const int mxn=100000;
bool operator < (QQ a,QQ b) { return a.id<b.id;}
void add(int x,int d) { for (;x<=mxn;x+=x&(-x)) c[x]=max(c[x],d); }
void clear(int x) { for (;x<=mxn;x+=x&(-x)) c[x]=0;}
int query(int x)
{
int ans=0;
for (;x;x-=x&(-x)) ans=max(ans,c[x]);
return ans;
}
void solve(int n,int al,int ar)
{
if (n<1) return;
int mid=(al+ar)>>1,w=0;
if (al!=ar)
{
for (int i=1;i<=n;i++)
if ((al<=q[i].l&&q[i].l<=mid)||(al<=q[i].a&&q[i].a<=mid)) swap(q[i],q[++w]);
solve(w,al,mid);
}
w=0;
sort(q+1,q+n+1);
for (int i=1;i<=n;i++)
{
if (q[i].l>=mid) q[i].f=max(q[i].f,query(q[i].a)+1);
if (q[i].a<=mid) add(q[i].r,q[i].f);
}
for (int i=1;i<=n;i++) clear(q[i].r);
if (al!=ar)
{
for (int i=1;i<=n;i++)
if ((mid<q[i].l&&q[i].l<=ar)||(mid<q[i].a&&q[i].a<=ar)) swap(q[i],q[++w]);
solve(w,mid+1,ar);
}
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++)
{
scanf("%d",&q[i].a);
q[i].l=q[i].r=q[i].a;
q[i].id=i; q[i].f=1;
}
for (int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
q[x].l=min(q[x].l,y);
q[x].r=max(q[x].r,y);
}
solve(n,1,100000);
int ans=0;
for (int i=1;i<=n;i++) ans=max(ans,q[i].f);
printf("%d\n",ans);
return 0;
}
0 0
- bzoj 4553: [Tjoi2016&Heoi2016]序列
- BZOJ 4553: [Tjoi2016&Heoi2016]序列
- BZOJ 4553 [Tjoi2016&Heoi2016]序列
- BZOJ 4553: [Tjoi2016&Heoi2016]序列
- [Tjoi2016&Heoi2016]【BZOJ 4553】【JZOJ 4606】序列
- 【50.40%】【BZOJ 4553】[Tjoi2016&Heoi2016]序列
- 4553: [Tjoi2016&Heoi2016]序列
- 4553: [Tjoi2016&Heoi2016]序列
- bzoj 4553: [Tjoi2016&Heoi2016]序列 cdq分治+树状数组
- BZOJ 4553 [Tjoi2016&Heoi2016]序列 线段树套treap
- BZOJ4553 [Tjoi2016&Heoi2016]序列
- bzoj4553【TJOI2016&HEOI2016】序列
- [Tjoi2016&Heoi2016]序列
- 【TJOI2016&&HEOI2016】序列
- BZOJ4553: [Tjoi2016&Heoi2016]序列
- 【bzoj4553】[Tjoi2016&Heoi2016]序列
- Bzoj4553: Tjoi2016&Heoi2016-序列
- bzoj 4553: [Tjoi2016&Heoi2016]序列 (CDQ分治+DP+树状数组)
- shell 参数,shell与Java 交互参数
- xcode安装 插件
- NSIS自删除
- Lua系统函数
- spring集成jms用法
- bzoj 4553: [Tjoi2016&Heoi2016]序列
- [Android]ListView中分割线的设置
- MySQL查看数据库、表的占用空间大小
- SERVLETJSP学习(三)—— 容器对路径的处理 、Servlet特性
- TCHAR和CHAR类型的互转
- Axis2 webservice下出现org.apache.axis2.AxisFault报错问题
- Dubbo源码分析(四):dubbo中bean的加载
- Android 属性动画(Property Animation) 完全解析 (下)
- android如何分析内存泄漏