B(two point)

题意:

  给出长度为n的非递减数组E[1..n],对于所有三元组(i,j,k),1<=i<j<k<=n且Ek-Ei<=U,我们需要计算出最大的(Ek-Ej)/(Ek-Ei)

  n<=1e5

分析:

  考虑枚举i和k,那么j一定是i+1

  容易发现k越靠右值越大,所以k是满足Ek-Ei<=U的最大的k

  于是two point就行了

C(思维)

题意:

  主角每天对河流水位进行标记,相同水位不重复标记。给定每天的在河流水位上的标记数,求最小的所有天的河流水位下的标记数之和。

  n<=1e5

分析:

  等价于我们要最小化每天的标记总数

  我们可以得到一些限制条件,f(i)>=f(i-1) f(i)>=m(i)+1

  我们可以先从前到后扫一遍得到f

  但有些问题,就是可能会发生标记数突变,即有两天标记数差值超过1

  所以我们只能从后向前将依次递增,最后得到正确的f(i)

  答案就是Σf(i)-m(i)-1

D(二维偏序)

题意:
  在一个数轴上有n个飞机,每个飞机都有个飞行速度和初始位置。风速的范围是[-w,w]

  若两架飞机i,j可以在某个风速下同时到达0号点,我们就计数一次

  问最后计数的结果是多少

  n<=1e5,w<=1e5

分析:

  我们考虑作出每架飞机的到达时间与风速的函数图像,一定是光滑的单调曲线

  如果两架飞机可以同时到达原点,那么就是两条曲线有交点,那就是(ta-ta')(tb-tb')<=0

  于是就变成了一个二维偏序计数的问题,直接BIT就行了

E(dp)

题意:

  有n个箱子,每个箱子都有一个高度,部分箱子是重要箱子,部分箱子是非重要箱子。

  你需要找个垒箱子的顺序,使得底面高度在[l,r]范围内的重要箱子个数最多。

  n<=10000,保证所有箱子的高度和<=10000

分析:

  容易发现一个性质,那就是在[l,r]内连续放置的箱子一定是从小到大垒的

  于是我们可以枚举在[l,r]内放连续的最小的x个重要箱子,然后其它箱子作为垒高度用的

  但是可能会在这x个重要箱子上再放一个比较高的箱子,答案会+1

  于是dp[j]表示凑出高度j最少需要多少个重要箱子,就可以根据dp[j]的值判断是否答案加1了

  时间复杂度O(nh)

 #include<bits/stdc++.h>
using namespace std;
const int maxn=;
struct wjmzbmr
{
int a,b;
bool operator < (const wjmzbmr &x) const
{
if(b!=x.b) return b<x.b;
return a>x.a;
}
}a[maxn+];
int dp[maxn+];
int s[maxn+];
int n,l,r,m;
int ans;
int main()
{
scanf("%d%d%d",&n,&l,&r);
for(int i=;i<=n;++i) scanf("%d",&a[i].a);
for(int i=;i<=n;++i) scanf("%d",&a[i].b);
sort(a+,a+n+);
for(int i=;i<=maxn;++i) dp[i]=n+;
for(int i=n;i>=;--i) s[i]=s[i+]+a[i].a;
for(int i=;i<=n;++i) if(a[i].b==) ++m;else break;
//for(int i=1;i<=n;++i) printf("%d %d\n",a[i].a,a[i].b);
dp[]=;
for(int i=;i<=n;++i)
{
if(i>m)
for(int j=l;j+s[i]<=r;++j)
if(dp[j]<=n)
ans=max(ans,n-i++(dp[j]+m<i-));
for(int j=r;j>=a[i].a;--j)
dp[j]=min(dp[j],dp[j-a[i].a]+a[i].b);
}
for(int j=l;j<=r;++j)
if(dp[j]<n-m) ans=max(ans,);
printf("%d\n",ans);
return ;
}

最新文章

  1. 为listview的item添加动画效果
  2. iOS-Debug
  3. Jquery API Hybrid APP调研
  4. Codeforces Round #301 (Div. 2) E . Infinite Inversions 树状数组求逆序数
  5. laravel 日志
  6. Spring+Struts集成(方案一)
  7. 前端之旅HTML与CSS篇之a便签中放入其他块元素会撑大高度的原因
  8. 把json数据转换成集合
  9. CentOS7安装HDP集群
  10. 正则表达式识别js跳转的链接
  11. PAT-GPLT训练集 L2-001 紧急救援(最短路)
  12. 【linux】之查看物理CPU个数、核数、逻辑CPU个数
  13. C#调用非托管dll--路径问题
  14. Java-Maven(八):配置远程中央仓库的各种方法
  15. php pdo对象使用详解: 连接数据库与exec方法
  16. P4879 ycz的妹子
  17. Cachefiled
  18. 用TableView写带特效的cell
  19. php面试题2018
  20. Cocoa Touch(三):图形界面UIKit、Core Animation、Core Graphics

热门文章

  1. javascript(函数式编程思考) ---&gt; Map-Filter-quicksort-Collatz序列-Flodl-Flodr
  2. python 学习总结4
  3. this version of SLF4J requires log4j version 1.2.12 or later.
  4. JAVA面向过程VS面向对象
  5. Python 描述符(Descriptor) 附实例
  6. Idea使用Tomcat乱码 tomcat 9.0 8.5.37乱码
  7. Ubuntu 14.04 Unity 启动器加入最小化点击功能
  8. Knockout v3.4.0 中文版教程-2-监控-通过监控创建视图模型(上)
  9. Java-得到类的包
  10. JSON Extractor/jp@gc - JSON Path Extractor 举例