hdu 4521 线段树改点求点的应用
小明系列问题——小明序列
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 1264 Accepted Submission(s): 344
提起小明序列,他给出的定义是这样的: ①首先定义S为一个有序序列,S={ A1 , A2 , A3 , ... , An },n为元素个数 ; ②然后定义Sub为S中取出的一个子序列,Sub={ Ai1 , Ai2 , Ai3 , ... , Aim },m为元素个数 ; ③其中Sub满足 Ai1 < Ai2 < Ai3 < ... < Aij-1 < Aij < Aij+1 < ... < Aim ; ④同时Sub满足对于任意相连的两个Aij-1与Aij都有 ij - ij-1 > d (1 < j <= m, d为给定的整数); ⑤显然满足这样的Sub子序列会有许许多多,而在取出的这些子序列Sub中,元素个数最多的称为“小明序列”(即m最大的一个Sub子序列)。 例如:序列S={2,1,3,4} ,其中d=1; 可得“小明序列”的m=2。即Sub={2,3}或者{2,4}或者{1,4}都是“小明序列”。
当小明发明了“小明序列”那一刻,情绪非常激动,以至于头脑凌乱,于是他想请你来帮他算算在给定的S序列以及整数d的情况下,“小明序列”中的元素需要多少个呢?
1 2
5 1
3 4 5 1 2
5 2
3 4 5 1 2
2
1
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=;
#define L(x) 2*x
#define R(x) 2*x+1
struct node
{
int l,r,mx;
int mid(){return (l+r)>>;}
}tree[*maxn];
struct NODE
{
int val,id;
}pp[maxn];
bool cmp(NODE a,NODE b)
{
if(a.val==b.val)return a.id>b.id;
return a.val<b.val;
}
void pushup(int p)
{
tree[p].mx=max(tree[L(p)].mx,tree[R(p)].mx);
}
void build(int p,int l,int r)
{
tree[p].l=l;
tree[p].r=r;
tree[p].mx=;
if(l==r)return;
int m=tree[p].mid();
build(L(p),l,m);
build(R(p),m+,r);
pushup(p);
}
void update(int p,int pos,int val)
{
if(tree[p].l==tree[p].r)
{
tree[p].mx=max(tree[p].mx,val);
return;
}
int m=tree[p].mid();
if(pos<=m)update(L(p),pos,val);
else update(R(p),pos,val);
pushup(p);
}
int query(int p,int l,int r)
{
if(l>r)return ;
if(tree[p].l>=l&&tree[p].r<=r)return tree[p].mx;
int m=tree[p].mid();
int ans=-;
if(l<=m)ans=max(ans,query(L(p),l,r));
if(r>m)ans=max(ans,query(R(p),l,r));
return ans;
}
int main()
{
int i,j,k,m,n,d;
while(~scanf("%d%d",&n,&d))
{
for(i=;i<=n;i++)scanf("%d",&pp[i].val),pp[i].id=i;
sort(pp+,pp+n+,cmp);
// for(i=1;i<=n;i++)cout<<pp[i].val<<" ";cout<<endl;
build(,,n);
int ans=;
for(i=;i<=n;i++)
{
j=pp[i].id;
k=query(,,j-d-);
ans=max(ans,k+);
update(,j,k+);
}
printf("%d\n",ans);
}
return ;
}
hdu 4521 线段树改点求点的应用的更多相关文章
- 覆盖的面积 HDU - 1255 线段树+扫描线+离散化 求特定交叉面积
#include<cstdio> #include<map> #include<algorithm> using namespace std; ; struct N ...
- HDU 1754 I Hate It 线段树单点更新求最大值
题目链接 线段树入门题,线段树单点更新求最大值问题. #include <iostream> #include <cstdio> #include <cmath> ...
- hdu 1754 线段树(Max+单点修改)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu 5877 线段树(2016 ACM/ICPC Asia Regional Dalian Online)
Weak Pair Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- hdu 3397 线段树双标记
Sequence operation Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- hdu 4533 线段树(问题转化+)
威威猫系列故事——晒被子 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tot ...
- hdu 2871 线段树(各种操作)
Memory Control Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hdu 4052 线段树扫描线、奇特处理
Adding New Machine Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- hdu 1542 线段树扫描(面积)
Atlantis Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
随机推荐
- OpenWrt backfire trunk源码下载及编译
OpenWrt signature check failed remove wrong signature file svn co svn://svn.openwrt.org/openwrt/bran ...
- jquery实现仿商品星级评价
一,HTML部分 <div id="rating-star"> <a href="#">0</a> < ...
- ubuntu WiFi: operation not possible due to RF-kill《转载》
Some people have been experiencing WiFi problems with Ubuntu 10.10 since an update that happend just ...
- 【取对数+科学计数法】【HDU1060】 N^N
Leftmost Digit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- 解决net-snmp正确输出MAC地址和判断空的IP地址
function readVarbinds (buffer, varbinds) { buffer.readSequence (); while (1) { buffer.readSequence ( ...
- C# Process.Start()方法详解(转)
C# Process.Start()方法详解 System.Diagnostics.Process.Start(); 能做什么呢?它主要有以下几个功能: 1.打开某个链接网址(弹窗). 2.定位打开某 ...
- JQuery>>>get/post赋值全局变量
JQuery' post&get: asynchronous. 2014-06-27 16:57:25 var client; function getClient(){ $.ajax ...
- 常用工具类,文件和内存的大小获取,shell脚本的执行
/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Versi ...
- Visual Studio 2008快捷键
命令行:Devenv 启动VS StudionIsqlw 启动SQL2000查询分析器Sqlwb 启动SQL2005企业管理器Inetmgr 启动IIS管理器大纲Ctrl+M,O折叠所有大纲Ctrl+ ...
- RemoteViews的理解和使用
一.RemoteViews简介 作用:跨进程更新界面 使用场景:通知栏.桌面小部件 二.在通知栏上的应用 原理:通过RemoteViews加载布局,通过 ...