X day4
题目
官方题解
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的更多相关文章
- python_way,day4 内置函数(callable,chr,随机验证码,ord),装饰器
python_way,day4 1.内置函数 - 下 制作一个随机验证码 2.装饰器 1.内置函数 - 下 callable() #对象能否被调用 chr() #10进制数字对应的ascii码表中的内 ...
- Spark菜鸟学习营Day4 单元测试程序的编写
Spark菜鸟学习营Day4 单元测试程序的编写 Spark相比于传统代码是比较难以调试的,单元测试的编写是非常必要的. Step0:需求分析 在测试案例编写前,需完成需求分析工作,明确程序所有的输入 ...
- Spark Tungsten揭秘 Day4 内存和CPU优化使用
Spark Tungsten揭秘 Day4 内存和CPU优化使用 今天聚焦于内存和CPU的优化使用,这是Spark2.0提供的关于执行时的非常大的优化部分. 对过去的代码研究,我们会发现,抽象的提高, ...
- Catalyst揭秘 Day4 analyzer解析
Catalyst揭秘 Day4 analyzer解析 今天继续解析catalyst,主要讲一下analyzer,在sql语句的处理流程中,analyzer是在sqlparse的基础上,把unresol ...
- Kakfa揭秘 Day4 Kafka中分区深度解析
Kakfa揭秘 Day4 Kafka中分区深度解析 今天主要谈Kafka中的分区数和consumer中的并行度.从使用Kafka的角度说,这些都是至关重要的. 分区原则 Partition代表一个to ...
- Python之路,Day4 - Python基础4 (new版)
Python之路,Day4 - Python基础4 (new版) 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...
- Day4 - Python基础4 迭代器、装饰器、软件开发规范
Python之路,Day4 - Python基础4 (new版) 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...
- ##DAY4 事件的基本概念、触摸的基本概念、响应者链、手势
##DAY4 事件的基本概念.触摸的基本概念.响应者链.手势 #pragma mark ———————事件的基本概念 ——————————— 事件的基本概念: 1)事件是当用户的手指触击屏幕及在屏幕 ...
- Day4:T1小技巧(类似于指针操作)T2搜索+小细节
Day4:其中有很多小技巧get T1 一直没有听到过像这样的小技巧的略专业名词,有点类似于指针操作,之前有碰到过很多这样的题目 每次都是以不同的形式出现,但是感觉思想还是有点接近的吧(就比如某天有一 ...
- Python基础篇-day4
本节目录: 1.字符编码 2.函数 2.1参数 2.2变量 2.3返回值 2.4递归 2.5 编程范式 2.6 高阶函数 *************************************** ...
随机推荐
- 接口测试工具postman(五)批量执行测试用例
1.准备好测试用例及相关数据 2.点击Run按钮 3.选择运行collection或者folder 4.运行完成
- Linux命令应用大词典-第33章 X Window
33.1 xhost:X服务器的访问控制程序 33.2 xinit:X Window系统初始化 33.3 Xlsclients:在显示器中列出正在运行的客户端应用程序 33.4 xlsfonts:显示 ...
- Python2快速入门教程,只需要这十五张图片就够了!
今天给大家分享的教程是适用于Python 2.7,但它可能适用于Python 2.Python 2.7将停止在2020中的支持. 与Python 2.7和3兼容的Python代码是完全可能的.通过使用 ...
- 测试模拟 白屏 / FOUC
白屏和FOUC 白屏与无样式内容闪烁(FOUC)是因为不同浏览器加载与显示页面的机制不同而造成的. 我们可以通过一个实验来进行测试和模拟白屏.FOUC的现象,让我们更好的理解白屏.FOUC. 测试de ...
- 第一课——从main到WinMain
一.Visual C++6.0 由微软公司推出的基于Windows系统的可视化集成开发环境(IDE) 微软公司为其开发了功能强大的MFC(Microsoft Foundation Class,微软基础 ...
- 11.22Daily Scrum
人员 任务分配完成情况 明天任务分配 王皓南 实现网页上视频浏览的功能.研究相关的代码和功能.979 数据库测试 申开亮 实现网页上视频浏览的功能.研究相关的代码和功能.978 实现视频浏览的功能 王 ...
- 重构 之 总结代码的坏味道 Bad Smell (一) 重复代码 过长函数 过大的类 过长参数列 发散式变化 霰弹式修改
膜拜下 Martin Fowler 大神 , 开始学习 圣经 重构-改善既有代码设计 . 代码的坏味道就意味着需要重构, 对代码的坏味道了然于心是重构的比要前提; . 作者 : 万境绝尘 转载请注明出 ...
- [zt]手把手教你写对拍程序(PASCAL)
谁适合看这篇文章? ACMERS,OIERS或其它参加算法竞赛或需要算法的人 对操作系统并不太熟悉的人 不会写对拍的人 在网上找不到一个特别详细的对拍样例的人 不嫌弃我写的太低幼的人 前言 在NOIP ...
- 最多水容器(M)
题目 给定n个非负整数a 1,a 2,...,a n,其中每个代表坐标(i,a i)处的一个点.绘制n条垂直线,使得线i的两个端点处于(i,a i)和(i,0)处.找到两条线,它们与x轴一起形成一个容 ...
- 3dContactPointAnnotationTool开发日志(十八)
今天实现了tab效果,按tab键可以在status面板的各个输入框内来回切换,参考Unity3D - UGUI实现Tab键切换输入框.按钮(按Tab键切换高亮显示的UI)