湖南多校对抗赛(2015.03.28) G Good subsequence

题意:找到一个序列中极值<=k的最长字串的长度。

解题思路:set容器双递推。

解题代码:

 1 // File Name: g.cpp
 2 // Author: darkdream
 3 // Created Time: 2015年03月28日 星期六 12时04分39秒
 4
 5 #include<vector>
 6 #include<list>
 7 #include<map>
 8 #include<set>
 9 #include<deque>
10 #include<stack>
11 #include<bitset>
12 #include<algorithm>
13 #include<functional>
14 #include<numeric>
15 #include<utility>
16 #include<sstream>
17 #include<iostream>
18 #include<iomanip>
19 #include<cstdio>
20 #include<cmath>
21 #include<cstdlib>
22 #include<cstring>
23 #include<ctime>
24 #define LL long long
25 #define maxn 100005
26 using namespace std;
27 multiset<int>  st;
28 int n , k ;
29 int a[maxn];
30 int main(){
31    while( scanf("%d %d",&n,&k) != EOF)
32    {
33     int mx = 1;
34     st.clear();
35     for(int i = 1 ;i <= n;i ++)
36     {
37        scanf("%d",&a[i]);
38     }
39     for(int i = 1,j = 1; i <= n;i ++)
40     {
41        st.insert(a[i]);
42        for(;*st.rbegin()-*st.begin() > k ; j ++)
43        {
44           st.erase(st.find(a[j]));
45        }
46        if(i - j +1 >= mx)
47            mx = i-j+1;
48     }
49     printf("%d\n",mx);
50    }
51 return 0;
52 }

时间: 2024-10-16 17:03:02

湖南多校对抗赛(2015.03.28) G Good subsequence的相关文章

湖南多校对抗赛3.28 J - Jerry&#39;s trouble

Problem J: Jerry's trouble Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 96  Solved: 46 [Submit][Status][Web Board] Description Jerry is caught by Tom. He was penned up in one room with a door, which only can be opened by its code. The code is the

iOS 学习笔记 六 (2015.03.28)常见错误

2015.03.28 1. property's synthesized getter follows Cocoa naming convention for returning 'owned' objects You own any object you create You create an object using a method whose name begins with “alloc”, “new”, “copy”, or “mutableCopy” (for example, 

湖南多校对抗赛(2015.03.28) E Longest Increasing Subsequence Again

题意:给你一个序列,问你删除掉连续的一段,使得剩下的序列的最长上升字串最大,问你这个最大值. 解题思路:分段dp,  dp[i][0] ,dp[i][1]   , 0表示前面没有切过,只能从前一个数的0状态得到,1状态表示前面已经切过了,能从前一个的1状态得到,也能从 在他前面的比他值小的dp[j][0](j < i && a[j] < a[i])的最大值得到,这里用线段树维护就行了. 解题代码: 1 // File Name: b.cpp 2 // Author: darkd

湖南多校对抗赛(2015.03.28) A Rectangle

题意:给你一些最多宽为2 的木板,让你放在一个宽为二的盒子里面,问你这个盒子最短有多长. 解题思路:DP,离中间最近的那个值. 解题代码: 1 // File Name: a.cpp 2 // Author: darkdream 3 // Created Time: 2015年03月28日 星期六 12时13分56秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<set> 9

湖南多校对抗赛(2015.03.28) B Design road

题意:给你起点(0,0),终点(x,y),中间有很多条河, 在河上面建桥花费c1,在陆地建路花费c2,问你最小花费是多少. 解题思路:我们知道,我们考虑的时候完全可以把河都移动到一边来求,这样只需要三分就行了. 解题代码: 1 // File Name: b.cpp 2 // Author: darkdream 3 // Created Time: 2015年03月28日 星期六 13时26分39秒 4 5 #include<vector> 6 #include<list> 7 #

湖南多校对抗赛(2015.03.28) H SG Value

题意:给你一个集合,动态插入 ,动态询问,然后问你这个集合的sg值(这个集合用加法运算不能产生的那个最小正整数)是多少. 解题思路:假设我们现在的这个SG值是 x 1)现在插入集合里面一个数v   如果这个v > x ,那么显然  sg值x不变,  把v放进从小到大的优先队列中 2)如果这个 v <= x 那么sg值x肯定就会变成  x + v, 每更新一次 sg值,就去看优先队列top元素是否是 小于等于 x的 ,如果小于等于,其实就等于把这个top元素进行1操作,这样就不会错了. 解题代码

湖南多校对抗赛(2015.03.28) I Inversion Sequence

题意:给你一个序列a[i],代表 i这个数 在b数列中有多少个值在它前面且比它大,问你求B序列 解题思路:线段树的简单应用,找第几个空,类似二分. 解题代码: 1 // File Name: i.cpp 2 // Author: darkdream 3 // Created Time: 2015年03月28日 星期六 12时56分11秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<

湖南多校对抗赛(2015.03.28)CSU1547~1536 题解

比赛链接:点击打开链接 A:点击打开链接 题意: 有2种矩阵1*x和2*x, 用最小的矩阵2*m来把这些框住,使得m最小,输出最小的m 输入: n个矩阵 下面n行给出wi, xi, wi的取值只有1,2两种,且矩阵不能旋转重叠. 思路: 矩阵宽为2就直接加到答案上,所以只考虑矩阵宽为1. dp[i]表示第一行能放的宽度,类似背包求出这个dp 然后if(dp[i] is ok) ans = min(ans, max(sum-i, i) ); #include <iostream> #includ

湖南多校对抗赛(2015.03.15)9题题解 ABCEFGHJK

比赛链接:点击打开链接 A:点击打开链接 题意: 问n的排列中多少个不满足 for(int i = 1; i <= n; i++) a[a[i]] == a[i]; 显然有 n!-1 所以输出 (n!-1)%mod; #include <iostream> #include <cstdio> #include <algorithm> #include <string> #include <cmath> #include <cstrin