题目:https://www.luogu.org/problemnew/show/P1155

思路...

看博客:https://www.cnblogs.com/Narh/p/9213825.html

二分图什么的,字典序什么的,考场上怎么想出来...

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int const maxn=;
int n,a[maxn],f[maxn],col[maxn],head[maxn],ct,pos[maxn];
bool flag;
struct N{
int to,next;
N(int t=,int n=):to(t),next(n) {}
}edge[maxn*maxn];
void add(int x,int y){edge[++ct]=N(y,head[x]); head[x]=ct;}
bool init()
{
f[n]=n+;//!
for(int i=n-;i;i--)
{
f[i]=min(a[i+],f[i+]);
for(int j=i+;j<=n;j++)
if(a[j]>a[i]&&f[j]<a[i])add(i,j),add(j,i);
}
return ;
}
void dfs(int x)
{
for(int i=head[x];i;i=edge[i].next)
{
int u=edge[i].to;
if(col[u]==col[x]){flag=; return;}
else if(!col[u])col[u]=(col[x]^),dfs(u);
if(flag)return;
}
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
init();
for(int i=;i<=n;i++)
if(!col[i])
{
col[i]=;
dfs(i);
if(flag){printf("0\n"); return ;}
}
int nw=;
for(int i=;i<=n;i++)
{
pos[a[i]]=col[i];
if(col[i]==)printf("a ");
else printf("c ");
while(pos[nw])
{
if(pos[nw]==)printf("b ");
else printf("d ");
nw++;
}
}
return ;
}

最新文章

  1. JSONObject.fromObject(map)(JSON与JAVA数据的转换)
  2. Hibernate学习笔记(一)
  3. 再读C++线程池
  4. iOS开发中调试小技巧
  5. ARM寻址方式,王明学learn
  6. pic计数
  7. java中的线程创建和使用
  8. dynamic_cast,const_cast,static_cast,reinterpret_cast 详解
  9. HDU 1241 Oil Deposits (DFS/BFS)
  10. hadoop自带的writable类型
  11. lesson5:利用jmeter来压测消息队列(activemq)
  12. 基数---SQL Server 2008 Bible
  13. ListBox第一行字体比其他行小
  14. NOIP2015-普及组复赛-第一题-金币
  15. iOS9新特性-3D Touch
  16. FastDFS分布式文件系统
  17. js 读取xml文件
  18. Android为TV端助力 电影栏目移动到底部或者顶部时抖动动画
  19. Excel坐标自动在AutoCad绘图_6
  20. 用addOnGlobalLayoutListener获取View的宽高

热门文章

  1. nginx配置location项的URL匹配规则
  2. 杭电 2037 今年暑假不AC
  3. python面向对象编程实例
  4. 【codeforces 1109B】Sasha and One More Name
  5. Windows学习总结(11)——Windows批处理命令编写代码及小程序简介
  6. jQuery学习之------对标签属性的操作
  7. manacher模板整理
  8. z_algorithm
  9. noip模拟赛 卖书
  10. 2018/2/16 解析Logback的AppenderBase源码,并举一反三的实现Logback扩展功能的思路,以及它的实际业务应用场景