序列(seq)

题目描述

给定 N,A,BN,A,B,构造一个长度为 NN 的排列,使得:

排列长度为 N;

最长上升子序列长度为 A;

最长下降子序列长度为 B。

我们有 SPJ,有解任意给出一组,否则说明无解。

输入

第一行一个整数 TT (1≤T≤101≤T≤10), 表示数据组数.

接下来 T 行,每行三个正整数 N、A、B。

输出

对每组数据:

如果有解,输出两行,第一行一个字符串 Yes,接下来一行 N 个整数,表示排列。

否则, 输出一行一个字符串 No。

样例输入

3
4 2 2
4 4 1
4 3 3

样例输出

Yes
3 4 1 2
Yes
1 2 3 4
No

提示

数据范围和子任务

对于全部的测试数据,保证 T≤10,N≤105,∑N≤2×105T≤10,N≤105,∑N≤2×105

子任务 1(20 分):N≤5N≤5 .

子任务 2(30 分):每组数据均满足 N=A×BN=A×B .

子任务 3(20 分):B≤2B≤2 .

子任务 4(30 分):无特殊限制


solution

先考虑a*b=n的情况怎么做:连续构造a段下降的b

比如 n=6 a=3 b=2

->      2 1 4 3 6 5

那么如果a>n/b 呢

就把某些段改成升序的

由于每一段之间互不影响,所以这不会改变b的答案

那么n!=a*b 也只是多了一段小段的而已

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 100005
using namespace std;
int T,n,a,b,ans[maxn],num[maxn];
void init(){
for(int i=1;i<=n;i++)ans[i]=num[i]=0;
}
int main()
{
freopen("seq.in","r",stdin);
freopen("seq.out","w",stdout);
cin>>T;
while(T--){
scanf("%d%d%d",&n,&a,&b);init();
if(a+b>n+1){puts("No");continue;}
for(int i=1;i<=n;i+=b){
int top=i+b-1;top=min(top,n);num[i]=top-i+1;
for(int j=top,x=0;j>=i;j--,x++)ans[j]=i+x;
}
int tmp=n/b;if(n%b)tmp++;
if(tmp>a){puts("No");continue;}
int tp=a-tmp,i=b+1;
while(tp){
if(tp>=num[i]-1){
for(int j=i;j<=i+num[i]-1;j++)ans[j]=j;
tp-=num[i]-1;i=i+b;
}
else {
for(int j=i;j<=i+tp-1;j++)ans[j]=j;
for(int j=i+num[i]-1,x=tp;j>=i+tp;j--,x++)ans[j]=i+x;
tp=0;
}
}
puts("Yes");
for(int i=1;i<=n;i++)cout<<ans[i]<<' ';cout<<endl;
}
return 0;
}

序列(seq)的更多相关文章

  1. BZOJ1798: [Ahoi2009]Seq 维护序列seq[线段树]

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 5504  Solved: 1937[Submit ...

  2. 【双标记线段树】bzoj1798维护序列seq

    一.题目 描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列 ...

  3. bzoj 维护序列seq(双标记线段树)

    Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 4184  Solved: 1518[Submit][Status][Discus ...

  4. BZOJ 1798: [Ahoi2009]Seq 维护序列seq( 线段树 )

    线段树.. 打个 mul , add 的标记就好了.. 这个速度好像还挺快的...( 相比我其他代码 = = ) 好像是#35.. ---------------------------------- ...

  5. 1798: [Ahoi2009]Seq 维护序列seq

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 2930  Solved: 1087[Submit ...

  6. bzoj 1798: [Ahoi2009]Seq 维护序列seq (线段树 ,多重标记下放)

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 7773  Solved: 2792[Submit ...

  7. bzoj 1798: [Ahoi2009]Seq 维护序列seq 线段树 区间乘法区间加法 区间求和

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeO ...

  8. BZOJ1798 维护序列seq

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 8058  Solved: 2964[Submit ...

  9. Bzoj 1798: [Ahoi2009]Seq 维护序列seq(线段树区间操作)

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小可 ...

随机推荐

  1. 2018.11.3 Nescafe18 T2 太鼓达人

    题目 背景 七夕祭上,Vani 牵着 cl 的手,在明亮的灯光和欢乐的气氛中愉快地穿行.这时,在前面忽然出现了一台太鼓达人机台,而在机台前坐着的是刚刚被精英队伍成员 XLk.Poet_shy 和 ly ...

  2. Spring中注解大全和应用

    @Controller@RestController:@Service@Autowired@RequestMapping@RequestParam@ModelAttribute@Cacheable@C ...

  3. Python学习笔记(二):数据类型

    一.python中的数据类型 python中的数据类型包括:整型.浮点型.布尔型.字符串类型 整型(int)和浮点型(float) Python中的整型只有int,没有short.long:浮点型fl ...

  4. python3 爬取汽车之家所有车型数据操作步骤(更新版)

    题记: 互联网上关于使用python3去爬取汽车之家的汽车数据(主要是汽车基本参数,配置参数,颜色参数,内饰参数)的教程已经非常多了,但大体的方案分两种: 1.解析出汽车之家某个车型的网页,然后正则表 ...

  5. django开发傻瓜教程-1-安装和HelloWorld

    安装 sudo pip install Django 新建项目 django-admin startproject XXX 启动项目 进入主目录下 python manage.py runserver ...

  6. C++构造函数实例——拷贝构造,赋值

    #define _CRT_SECURE_NO_WARNINGS //windows系统 #include <iostream> #include <cstdlib> #incl ...

  7. hdu 5667

    Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  8. shell脚本入门基础知识

    shell 脚本的第一行 #!/bin/bash #!/bin/sh 其实,sh是bash的一个软链接 sh -> bash 变量,字母下划线开头(好像是没有类型的) #普通变量 var1=ni ...

  9. Android开发——用户在屏幕上的手势识别

    个定点决定.四个属性分别为left(1),top(2),right(3),bottom(4). 数字为图上标出的距离.显然这四个属性是相对于父容器来定的,均可以通过get()方法获取. 因此很容易得出 ...

  10. python中subprocess.Popen的args和shell参数的使用

    subprocess模块定义了一个类: Popen class subprocess.Popen( args,        bufsize=0,        executable=None,    ...