题目链接:点击查看

题目大意:题意不明(英语渣),网上的简洁版转化:

对于每个i,所在下标p[i],在[p[i]−k,p[i]+k]中找到小于i的最大数x,然后ans[i]=ans[x]+1即可。

题目分析:裸的线段树+离线操作,因为求小于i的最大数x,所以可以维护一个最大值的线段树,然后离线对于每个i升序询问完后加入到线段树中即可,看不懂题啊啊啊啊啊

代码不讲了,一点细节也没有,裸的板子题:

#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
#include<queue>
#include<set>
#include<string>
using namespace std;
typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e5+100;int ans[N];struct node
{int a,id;bool operator<(node &b)const{return a<b.a;}
}a[N];struct Node
{int l,r,mmax;
}tree[N<<2];void pushup(int k)
{tree[k].mmax=max(tree[k<<1].mmax,tree[k<<1|1].mmax);
}void build(int k,int l,int r)
{tree[k].l=l;tree[k].r=r;tree[k].mmax=0;if(l==r)return;int mid=l+r>>1;build(k<<1,l,mid);build(k<<1|1,mid+1,r);
}void update(int k,int pos,int val)
{if(tree[k].l==tree[k].r){tree[k].mmax=val;return;}int mid=tree[k].l+tree[k].r>>1;if(mid>=pos)update(k<<1,pos,val);elseupdate(k<<1|1,pos,val);pushup(k);
}int query(int k,int l,int r)
{if(tree[k].l>r||tree[k].r<l)return 0;if(tree[k].r<=r&&tree[k].l>=l)return tree[k].mmax;return max(query(k<<1,l,r),query(k<<1|1,l,r));
}int main()
{int w;cin>>w;while(w--){int n,k;scanf("%d%d",&n,&k);for(int i=1;i<=n;i++){scanf("%d",&a[i].a);a[i].id=i;}sort(a+1,a+1+n);build(1,1,n);memset(ans,0,sizeof(ans));for(int i=1;i<=n;i++){int pos=a[i].id;int l=max(1,pos-k);int r=min(n,pos+k);int x=query(1,l,r);ans[i]=ans[x]+1;update(1,pos,i);}printf("%d",ans[1]);for(int i=2;i<=n;i++)printf(" %d",ans[i]);printf("\n");}return 0;
}

2019ICPC(南京) - Greedy Sequence(线段树)相关推荐

  1. codeforces CF438D The Child and Sequence 线段树

    $ \Rightarrow $ 戳我进CF原题 D. The Child and Sequence time limit per test: 4 seconds memory limit per te ...

  2. Codeforces Round #250 (Div. 1) D. The Child and Sequence 线段树 区间取摸

    D. The Child and Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest ...

  3. CodeForces - 1440E Greedy Shopping(线段树)

    题目链接:点击查看 题目大意:给出一个非严格递减的子序列,需要完成 m 次操作,分为下列两种类型: 1 x y:将区间 [ 1 , x ] 中的数进行 a[ i ] = max( a[ i ] , y ...

  4. [Codeforces1132G]Greedy Subsequences——线段树+单调栈

    题目链接: Codeforces1132G 题目大意:给定一个序列$a$,定义它的最长贪心严格上升子序列为$b$满足若$a_{i}$在$b$中则$a_{i}$之后第一个比它大的也在$b$中.给出一个数 ...

  5. 【bzoj4355】Play with sequence 线段树区间最值操作

    题目描述 维护一个长度为N的序列a,现在有三种操作: 1)给出参数U,V,C,将a[U],a[U+1],...,a[V-1],a[V]都赋值为C. 2)给出参数U,V,C,对于区间[U,V]里的每个数 ...

  6. 【 bzoj 4355 】 Play with sequence - 线段树乱搞

    先讲个故事... 据说某一天,claris扔了一道题到某群里面然后引起了不大的讨论~然后好学向上的whx同学发现了这题...聪明的whx想了很久...然后!whx发现看不懂claris给的暴力的证明. ...

  7. UESTC-1546___Bracket Sequence —— 线段树 + 括号序列

    题目链接:点我啊╭(╯^╰)╮ 题目大意: 给出一个括号序列      setsetset -- 将给定区间全部转化为指定括号      reversereversereverse -- 将给定区间的 ...

  8. 【BZOJ4355】Play with sequence 线段树

    [BZOJ4355]Play with sequence Description 维护一个长度为N的序列a,现在有三种操作: 1)给出参数U,V,C,将a[U],a[U+1],...,a[V-1],a ...

  9. HDU 5828 Rikka with Sequence (线段树+剪枝优化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5828 给你n个数,三种操作.操作1是将l到r之间的数都加上x:操作2是将l到r之间的数都开方:操作3是 ...

最新文章

  1. 安全可控、依法合规 人工智能落地金融领域“讲原则”
  2. linux下如何将mysql加入环境变量
  3. AppDomain,应用程序域
  4. js实现椭圆轨迹_Canvas实现直线与圆形的物理运动效果
  5. HBase cell
  6. exe的dll加载过程
  7. Linux提权:常用三种方法
  8. thinkphp3.2 jquery ajax巧妙使用
  9. 将z-blog改成英文blog所遇到的问题
  10. 【思维智慧】007.利用贪婪的人身上的破绽
  11. 100-48微软(运算)
  12. Function与Object
  13. 洛谷 P1558 色板游戏
  14. celery cluser redis_celery结合redis 使用
  15. 如何突破织梦后台发布文章的250字符的内容摘要字数限制
  16. 面包屑导航条实现三级分类查询
  17. HBuilder 第一个app项目
  18. ES根据日期查询数据
  19. 请选择要安装的mac os 磁盘
  20. 项目开发过程中的管理规范

热门文章

  1. Zookeeper数据的同步流程
  2. 如何向Spring Bean 中注入java.util.Properties?
  3. 选择Bean 实例化策略
  4. pom文件内标签的讲解
  5. 缓存-分布式锁-Redisson-闭锁测试
  6. MybatisPlus实现自动填充
  7. Topic交换器-搭建环境
  8. SpringCloud与子项目版本兼容说明
  9. 最像windows10的linux,Linuxfx:外观神似Win10的Linux操作系统
  10. linux7添加两个网关,RHEL7设置IP地址、网关和DNS