BZOJ 5011 [JXOI2016]颜色
来源:互联网 发布:网络作者笔名 编辑:程序博客网 时间:2024/06/11 14:20
题目描述 传送门
按照老师的思路:倍增(st表)+递推 完成的此题。
但不知道是不是我没写好还是我思路不好,这份代码在BZOJ明显比别人的慢。
希望dalao能分享更好的解法。
代码
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int maxn=3e5+5;int n;int a[maxn],begin[maxn],end[maxn],d[maxn][20],f[maxn][20];long long dp[maxn];inline int rmq(int l,int r,int o){ int k=0; while(1<<(k+1)<=r-l+1) k++; return o?max(f[l][k],f[r-(1<<k)+1][k]):min(d[l][k],d[r-(1<<k)+1][k]);}int main(){ int t; cin>>t; while(t--){ scanf("%d",&n); memset(begin,0,sizeof(begin)); memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); if(!begin[a[i]]) begin[a[i]]=end[a[i]]=i; else end[a[i]]=i; } for(int i=1;i<=n;i++) d[i][0]=begin[a[i]],f[i][0]=end[a[i]]; for(int j=1;(1<<j)<=n;j++) for(int i=1;i+(1<<j)-1<=n;i++){ d[i][j]=min(d[i][j-1],d[i+(1<<(j-1))][j-1]); f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]); } dp[n+1]=0; long long ans=0; for(int i=n;i>0;i--){ if(i!=begin[a[i]]) dp[i]=0; else{ int L=begin[a[i]],R=end[a[i]]; bool ok=1; for(;;){ //找到以i为起点的最短可选区间[i,R] if(rmq(L,R,0)<i) {ok=0;break;} int k=rmq(L,R,1); if(k>R){ L=R+1; R=k; } else break; } if(ok){ if(i==1&&(R==n||dp[R+1]>0)) ans--; //减去全选的 dp[i]=dp[R+1]+1; //从后往前递推 } } } for(int i=1;i<=n;i++) ans+=dp[i]; printf("%lld\n",ans+1); } return 0;}
阅读全文
0 0
- BZOJ 5011 [JXOI2016]颜色
- bzoj 2120: 数颜色
- bzoj 2120: 数颜色
- bzoj 2120: 数颜色
- BZOJ 2120 数颜色
- [BZOJ 2906]颜色:分块
- BZOJ 2120 数颜色
- BZOJ 2120: 数颜色
- BZOJ 2120 数颜色
- bzoj 2120 数颜色 题解
- BZOJ 2120 数颜色 暴力
- bzoj 2120: 数颜色(分块)
- 【bzoj 2120】维护队列【bzoj 2453】数颜色 双倍经验!!!
- BZOJ 2453: 维护队列&&BZOJ 2120 数颜色 分块
- 【BZOJ 2120】【国家集训队 2011】【数颜色】
- 【BZOJ 2120】 数颜色 (分块,暴力)
- BZOJ 2120 数颜色 分块+二分
- bzoj 2120 数颜色(可持久化莫队)
- MATLAB 笛卡尔坐标系制图
- SSM—CRUD maven 管理
- 日语的年份怎么读
- 动态规划实现:给定整数m , 取若干个1到n的整数可求和等于整数m,编程求出所有组合的个数。
- jenkins android自动化构建
- BZOJ 5011 [JXOI2016]颜色
- Java内存分析 其二
- JSON总结篇
- java web spring mvc 框架中使用mybatis报错的解决方案
- 视频播放的三种方式
- 【持续集成 Jenkins入门系列】02第二章 Jenkins安装与配置
- 基于Servlet的会话跟踪
- iOS Xcode9 不使用USB运行真机
- Vsphere日记01.ESXi5.5.install