套题 Codeforces Round #277 (Div. 2)
2015-10-25 13:19
274 查看
A. Calculating Function
水题,分奇数偶数处理一下就好了
View Code
水题,分奇数偶数处理一下就好了
#include<iostream> #include<stdio.h> #include<map> #include<cstring> #include<algorithm> using namespace std; #define maxn 100005 int b[maxn]; int a[maxn]; void add(int x,int val) { while(x<=100000) { b[x] = max(b[x],val); x += x & (-x); } } int get(int x) { int ans = 0; while(x) { ans = max(ans,b[x]); x -= x & (-x); } return ans; } int dp1[maxn]; int dp2[maxn]; int ans[maxn]; map<int,int> H; int main() { int n;scanf("%d",&n); int LIS = 0; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); dp1[i] = 1 + get(a[i]-1); add(a[i],dp1[i]); LIS = max(LIS,dp1[i]); } reverse(a+1,a+1+n); memset(b,0,sizeof(b)); for(int i=1;i<=n;i++) { a[i] = 100000 - a[i] + 1; dp2[i] = 1 + get(a[i] - 1); add(a[i],dp2[i]); } reverse(dp2+1,dp2+1+n); for(int i=1;i<=n;i++) { if(dp1[i]+dp2[i]-1!=LIS)ans[i]=1; else H[dp1[i]]++; } for(int i=1;i<=n;i++) { if(ans[i]!=1&&H[dp1[i]]==1) { ans[i]=3; } } for(int i=1;i<=n;i++) if(ans[i]==1) cout<<"1"; else if(ans[i]==0) cout<<"2"; else if(ans[i]==3) cout<<"3"; } /* 10 2 2 2 17 8 9 10 17 10 5 */
View Code
相关文章推荐
- windows server 许可port或执行技巧
- 测试编辑器
- activemq
- linux驱动ioctl
- 使用Ruby On Rails15分钟打造一个博客系统
- Docker容器资源管理cgroups功能测试
- 【HDOJ】4553 约会安排
- 集合中的其他类
- 项目绩效评估和奖励体系设计初衷
- IOS的属性和实例变量
- Java String中若干问题
- 理解OAuth 2.0
- 硬件-CPU3
- strcpy函数的实现
- 如何清除windows入侵的记录
- 利用Reachability框架进行网络连接状态监测
- 在grub中添加win7(以及从win7来的win10)的启动项
- 关于python中的property
- 关于UIScreen的applicationFrame和bounds方法区别
- Codeforces Round #312 (Div. 2) C. Amr and Chemistry(数论)