题目

官方题解

T1:

单调栈,单调队列因为认为考场上会写崩所以写了一个十分暴力的方法(线段树)

然后做一做区间覆盖即可

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define int long long
using namespace std;
inline int read(){
int f=,ans=;char c;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){ans=ans*+c-'';c=getchar();}
return f*ans;
}
int k[],n,a[],tmp[],res[],ans[];
void pushdown(int k,int l,int r){
if(res[k]==-) return;
ans[k<<]=res[k];
ans[k<<|]=res[k];
res[k<<]=res[k<<|]=res[k];
res[k]=-;
return;
}
int query1(int k,int l,int r,int x,int y){
if(x>y) return ;
if(x<=l&&r<=y) return ans[k];
int mid=l+r>>,maxn=;
pushdown(k,l,r);
if(x<=mid) maxn=max(maxn,query1(k<<,l,mid,x,y));
if(mid<y) maxn=max(maxn,query1(k<<|,mid+,r,x,y));
ans[k]=max(ans[k<<],ans[k<<|]);
return maxn;
}
int query(int k,int l,int r,int x,int y){ if(x>y) return <<-;
if(x<=l&&r<=y) {
return ans[k];
}
pushdown(k,l,r);
int mid=l+r>>,minn=<<-;
if(x<=mid) minn=min(minn,query(k<<,l,mid,x,y));
if(mid<y) minn=min(minn,query(k<<|,mid+,r,x,y));
ans[k]=min(ans[k<<],ans[k<<|]);
return minn;
}
void update1(int k,int l,int r,int x,int y,int pos){
if(x>y) return;
if(x<=l&&r<=y){ans[k]=res[k]=pos;return;}
pushdown(k,l,r);
int mid=l+r>>;
if(x<=mid) update1(k<<,l,mid,x,y,pos);
if(mid<y) update1(k<<|,mid+,r,x,y,pos);
ans[k]=max(ans[k<<],ans[k<<|]);
return;
}
void update(int k,int l,int r,int x,int y,int pos){
if(x>y) return;
if(x<=l&&r<=y){ans[k]=res[k]=pos;return;}
pushdown(k,l,r);
int mid=l+r>>;
if(x<=mid) update(k<<,l,mid,x,y,pos);
if(mid<y) update(k<<|,mid+,r,x,y,pos);
ans[k]=min(ans[k<<],ans[k<<|]);
return;
}
int h[],anss[],maxv;
signed main(){
memset(res,-,sizeof(res));
n=read();
for(int i=;i<=n;i++) k[i]=tmp[i]=a[i]=read(),h[i]=read();
sort(tmp+,tmp+n+);
for(int i=;i<=n;i++) a[i]=lower_bound(tmp+,tmp+n+,a[i])-tmp;
for(int i=;i<=n;i++){
int t1=query1(,,n,a[i]+,n);
anss[t1]+=h[i];
update1(,,n,,a[i],i);
}
memset(res,-,sizeof(res));
memset(ans,/,sizeof(ans));
for(int i=n;i>=;i--){
int t1=query(,,n,a[i]+,n);
if(t1>=&&t1<=n) anss[t1]+=h[i];
update(,,n,,a[i],i);
}
for(int i=;i<=n;i++)maxv=max(maxv,anss[i]);
cout<<maxv;
}

T2:

易发现答案是具有单调性的,所以二分判一判即可

时间复杂度:$O(n^2 \log n)$

// luogu-judger-enable-o2
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
inline int read(){
int f=,ans=;char c;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){ans=ans*+c-'';c=getchar();}
return f*ans;
}
int c,n;
int x[],y[],minn=<<-,xp[];
struct node{
int x,y;
}st[];
bool CHECK(int l,int r,int w){
if(r-l+<c) return ;
int cnt=;
int yp[];
memset(yp,,sizeof(yp));
for(int i=l;i<=r;i++) yp[++yp[]]=st[i].y;
sort(yp+,yp+yp[]+);
for(int i=c;i<=yp[];i++){
if(yp[i]-yp[i-c+]<=w) {
return ;
}
}
return ;
}
bool cmp(node x1,node x2){return x1.x<x2.x;}
bool check(int xx){
int l=;
for(int i=;i<=n;i++) st[i].x=x[i],st[i].y=y[i];
sort(st+,st+n+,cmp);
for(int r=;r<=n;r++){
if(st[r].x-st[l].x>xx){
if(CHECK(l,r-,xx)) {
return ;
}
while(st[r].x-st[l].x>xx) l++;
}
}
if(CHECK(l,n,xx)) return ;
return ;
}
int main(){
c=read(),n=read();
for(int i=;i<=n;i++) x[i]=read(),y[i]=read();
int l=,r=;
while(l<=r){
int mid=l+r>>;
if(check(mid)) minn=min(minn,mid),r=mid-;
else l=mid+;
}
cout<<minn+;
}

X day4的更多相关文章

  1. python_way,day4 内置函数(callable,chr,随机验证码,ord),装饰器

    python_way,day4 1.内置函数 - 下 制作一个随机验证码 2.装饰器 1.内置函数 - 下 callable() #对象能否被调用 chr() #10进制数字对应的ascii码表中的内 ...

  2. Spark菜鸟学习营Day4 单元测试程序的编写

    Spark菜鸟学习营Day4 单元测试程序的编写 Spark相比于传统代码是比较难以调试的,单元测试的编写是非常必要的. Step0:需求分析 在测试案例编写前,需完成需求分析工作,明确程序所有的输入 ...

  3. Spark Tungsten揭秘 Day4 内存和CPU优化使用

    Spark Tungsten揭秘 Day4 内存和CPU优化使用 今天聚焦于内存和CPU的优化使用,这是Spark2.0提供的关于执行时的非常大的优化部分. 对过去的代码研究,我们会发现,抽象的提高, ...

  4. Catalyst揭秘 Day4 analyzer解析

    Catalyst揭秘 Day4 analyzer解析 今天继续解析catalyst,主要讲一下analyzer,在sql语句的处理流程中,analyzer是在sqlparse的基础上,把unresol ...

  5. Kakfa揭秘 Day4 Kafka中分区深度解析

    Kakfa揭秘 Day4 Kafka中分区深度解析 今天主要谈Kafka中的分区数和consumer中的并行度.从使用Kafka的角度说,这些都是至关重要的. 分区原则 Partition代表一个to ...

  6. Python之路,Day4 - Python基础4 (new版)

    Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...

  7. Day4 - Python基础4 迭代器、装饰器、软件开发规范

    Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...

  8. ##DAY4 事件的基本概念、触摸的基本概念、响应者链、手势

    ##DAY4  事件的基本概念.触摸的基本概念.响应者链.手势 #pragma mark ———————事件的基本概念 ——————————— 事件的基本概念: 1)事件是当用户的手指触击屏幕及在屏幕 ...

  9. Day4:T1小技巧(类似于指针操作)T2搜索+小细节

    Day4:其中有很多小技巧get T1 一直没有听到过像这样的小技巧的略专业名词,有点类似于指针操作,之前有碰到过很多这样的题目 每次都是以不同的形式出现,但是感觉思想还是有点接近的吧(就比如某天有一 ...

  10. Python基础篇-day4

    本节目录: 1.字符编码 2.函数 2.1参数 2.2变量 2.3返回值 2.4递归 2.5 编程范式 2.6 高阶函数 *************************************** ...

随机推荐

  1. 180602-nginx多域名配置

    文章链接:https://liuyueyi.github.io/hexblog/2018/06/02/180602-nginx多域名配置/ nginx多域名配置 原来的域名过期了,重新买了一个hhui ...

  2. 微信小程序如何性能测试?

    背景: 微信小程序作为手机页面的一种,相比传统的网站和应用来说存在比较特殊的地方: 1.  开发者往往对程序做了限制,只能通过微信客户端访问 2.  通过微信的Oauth进行认证 这样往往会导致我们的 ...

  3. go通过第三方库 mahonia gbk 转utf8

    go get github.com/axgle/mahonia dec := mahonia.NewDecoder("GBK")ret:=dec.ConvertString(res ...

  4. CSS 之 选择器

    CSS的常见选择器 一.简单选择器 Simple Selectors 选择器 含义 * 通用元素选择器,匹配任何元素 E 标签选择器,匹配所有使用E标签的元素 .info class选择器,匹配所有c ...

  5. cygwin—excellent work!

    使用cygwin的好处在于可以避免直接使用linux同时又能最大限度的节省资源,共享windows的资源. 安装cygwin 安装安简单,当然,你首先需要使用163或者国内或者亚洲比较好的镜像作为下载 ...

  6. Python基础框架和工具

    最近在学Python金融大数据分析,在安装Python进行大数据分析的环境时遇到很多问题,例如:在安装pandas包时候就要到各种错误,总是缺少很多安装包,最后发现利用Python的Anaconda进 ...

  7. Leetcode - 461. Hamming Distance n&=(n-1) (C++)

    1. 题目链接:https://leetcode.com/problems/hamming-distance/description/ 2.思路 常规做法做完看到评论区一个非常有意思的做法.用了n&a ...

  8. Java标签实现分页

    Java实现标签分页 最近为了开发一个网站,里面要用分页功能,但是之前很少自己写分页标签,又不想用现成框架.所以自己参考了些资料,写了个分页例子测试了一下. 代码主要分为三个类: PageTag 分页 ...

  9. Python中的reload函数

    Python中的import语句可以导入module文件,但是import语句只是第一次导入的时候会执行module文件中的代码,然后就会把导入的模块文件存入到内存,当再次导入的时候,Python是直 ...

  10. 常用算法Java实现之快速排序

    快速排序和冒泡排序相似,都是通过多次比较和交换来实现排序. 具体流程如下: 1.首先设定一个分界值,通过分界值将数组分成左右两部分,将大于等于分界值的数据交换集中到右侧数组,将小于分界值的数据交换集中 ...