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 高阶函数 *************************************** ...
随机推荐
- JMeter随机上传附件
方法一: 1.添加一个前置Beanshell 2.输入代码: File folder = new File("/path/to/your/folder/with/audiofiles&quo ...
- python学习笔记02 --------------基础数据类型
python的基本数据类型: 1.基本数据 1.1. 数字类型 1.1.1 整数 int int() #将括号内内容转化为整数类型. 1.1.2 浮点数 float 1.1.3 复 ...
- JVM--内存模型与线程
一.硬件与效率的一致性 计算机的存储设备与处理器的运算速度存在几个数量级的差距,现在计算机系统不得不在内存和处理器之间增加一层高速缓存(cache)来作为缓冲.将运算需要的数据复制到缓存中,让运算能够 ...
- python 终极篇 --- django 路由系统
URL配置 基本格式: from django.conf.urls import url urlpattern ...
- 【shell 练习5】编写简单的多级菜单
一.简单的多级菜单 [root@web129 ~]# cat menu.sh #!/bin/bash #shell菜单演示 function menu() { echo -e `date` cat & ...
- Python最长连续数列的O(n)解法
题目 输入一个乱序的连续数列,输出其中最长连续数列长度,要求算法复杂度为 O(n) . 输入样例 100,4,200,1,3,2 54,55,300,12 1 5,4,3,2,1 1,2,3,4,5, ...
- 硬件电路中VCC,VDD,VEE,VSS有什么区别
电路中GND和GROUND.VCC,VDD,VEE,VSS有什么区别 一.解释 DCpower一般是指带实际电压的源,其他的都是标号(在有些仿真软件中默认的把标号和源相连的)VDD:电源电压(单极器件 ...
- c# CLR无法从 COM 上下文 0x51cd20 转换为 COM 上下文 0x51ce90
调试菜单--->异常---->managed debugging assistants栏下ContextSwitchDeadlock 前面的√去掉
- databales详解(一)
学习可参考:http://www.guoxk.com/node/jquery-datatables http://yuemeiqing2008-163-com.iteye.com/blog/20069 ...
- 关于CString总结
前言:串操作是编程中最常用也最基本的操作之一. 做为VC程序员,无论是菜鸟或高手都曾用过CString.而且好像实际编程中很难离得开它(虽然它不是标准C++中的库).因为MFC中提供的这个类对 我们操 ...