博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
small test on 5.29 night T1
阅读量:5072 次
发布时间:2019-06-12

本文共 1173 字,大约阅读时间需要 3 分钟。

 

    可以发现题目的重点是在第一个部分,因为只要信心值我们求出来了,那么第二问就是一个简单的最长上升子序列问题了,所以接下来只讲第一问。 

    

 

#include
#include
#include
#include
#include
#include
#define ll long longusing namespace std;#define lc (o<<1)#define mid (l+r>>1)#define rc ((o<<1)|1)const int maxn=100005;int n,a[maxn],b[maxn],c[maxn],f[maxn];int ans,r[maxn],sum[maxn*4],lef;inline bool cmp(const int &x,const int &y){ return c[x]
=lef) return query(lc,l,mid); else{ lef-=sum[lc]; return query(rc,mid+1,r);}}inline void umax(int x,int y){ for(;x<=n;x+=x&-x) f[x]=max(f[x],y);}inline int qmax(int x){ int an=0; for(;x;x-=x&-x) an=max(an,f[x]); return an;}inline void solve(){ build(1,1,n); for(int i=n;i;r[i]=i,i--) lef=a[i],b[i]=query(1,1,n); sort(r+1,r+n+1,cmp); memset(f,0,sizeof(f)); for(int i=1,now;i<=n;i++) now=r[i],umax(b[now],qmax(b[now])+1);}int main(){ freopen("amazon.in","r",stdin); freopen("amazon.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",a+i); for(int i=1;i<=n;i++) scanf("%d",c+i); solve(); printf("%d\n",qmax(n)); return 0;}

  

转载于:https://www.cnblogs.com/JYYHH/p/9107812.html

你可能感兴趣的文章
从零开始的莫比乌斯反演(函数)[详细推导]
查看>>
【通过反射获取成员变量并使用】
查看>>
LVS(Linux Viretual Server) 负载均衡器 + 后端服务器
查看>>
css之定位
查看>>
day1-python基础
查看>>
20145235 《信息安全系统设计基础》第03周学习总结
查看>>
pojo,javabean,entity,domain,dto,ejb区别
查看>>
垃圾回收器
查看>>
计算机程序的思维逻辑 (11) - 初识函数
查看>>
我们为什么需要Map-Reduce?
查看>>
dev的汉化
查看>>
C++中const使用注意要点(二)
查看>>
Windows Server 2016 Essentials试用
查看>>
windows8 提交应用商店失败,需要添加隐私声明 (privacy statement)
查看>>
Oracle 11g导出来的dmp导入到 10g的数据库(IMP-00010:不是有效的导出文件,头部验证失败)...
查看>>
Websphere设置JVM时区解决程序、日志时间快8小时问题
查看>>
编程疑难杂症の莫名的神秘联结
查看>>
VS2013自动注释插件
查看>>
MDP 马尔科夫链的介绍
查看>>
SpringMVC工作原理
查看>>