Codeforces 1221 F Choose a Square
不知道大佬们怎么想的,反正我看到这种区间包含性质的并且score只和包含的区间与询问区间挂钩的题,马上就想到了扫描线23333
虽然革命方向无比正确,但却因为SB错误交了5次才 A。
WA第一发:考虑到我们扫描线的话是要坐标离散化的,然而这种做法是默认正方形内至少有一个点。可所有点权都是负值就尴尬了,这个时候需要找一个空点来把答案替代成0。虽然我考虑到了这种情况,但是第一次找空点的时候不仅写麻烦了(我是用 num[i]+1<num[i+1] 来判断两个坐标之间是否有空隙),而且漏了最大坐标后面的。。。。不过如果你观察题面描述仔细的话,你是会发现输出要求的 坐标是可以 >1e9的,这就是这题的坑比之处,答案<0就可以直接输出 0 \n 1000000001 1000000001 1000000001 1000000001 了。。
WA第二发:我开的vector的下标是离散化之后的坐标,显然是要开两倍空间的,忘开了。。。
WA第三发:又发现线段树的下标也是离散化之后的坐标,显然空间是要开n的八倍的,wori
WA第四发:操作线段树的时候有个 long long 写成int了,gan
#include<bits/stdc++.h>
#define ll long long
using namespace std;
#define lc (o<<1)
#define mid (l+r>>1)
#define rc ((o<<1)|1)
#define pb push_back
const int N=500005; inline int read(){
int x=0,f=1; char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;
for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
return x*f;
} /*
注意数组空间啊!
虽然只有n个点,不过离散化之后最多涉及 2n 个坐标值
g[i]是用来存右端点在i的点的链表,所以空间开2n
因为线段树的下标是离散后的坐标次序,所以空间要开 8n 而不是 4n
*/ vector<int> g[N*2];
int n,a[N],b[N],num[N*2],ky,c[N],L,R,pos[N*8],w,le=1,ri,P;
ll ans=-1e18,mx[N*8],ad[N*8],now; inline void maintain(int o){
pos[o]=mx[rc]>mx[lc]?pos[rc]:pos[lc];
mx[o]=max(mx[lc],mx[rc]);
} inline void Get(int o,ll w){
ad[o]+=w,mx[o]+=w;
} inline void pushdown(int o){
if(ad[o]) Get(lc,ad[o]),Get(rc,ad[o]),ad[o]=0;
} void build(int o,int l,int r){
if(l==r){ pos[o]=mx[o]=num[l]; return;}
build(lc,l,mid),build(rc,mid+1,r);
maintain(o);
} void update(int o,int l,int r){
if(l>=le&&r<=ri){ Get(o,w); return;} pushdown(o); if(le<=mid) update(lc,l,mid);
if(ri>mid) update(rc,mid+1,r); maintain(o);
} void query(int o,int l,int r){
if(l>=le&&r<=ri){ if(mx[o]>mx[P]) P=o; return;}
// P在query后是最大的线段树上的节点,需要转换到具体的数轴上的点
pushdown(o); if(le<=mid) query(lc,l,mid);
if(ri>mid) query(rc,mid+1,r);
} inline void solve(){
build(1,1,ky),mx[0]=-1e18;
for(int i=1;i<=ky;i++){
for(int j:g[i]) ri=a[j],w=c[j],update(1,1,ky);
P=0,ri=i,query(1,1,ky);
if(mx[P]-num[i]>ans) ans=mx[P]-num[i],R=num[i],L=pos[P];
}
} int main(){
n=read(),num[0]=-1;
for(int i=1;i<=n;i++){
a[i]=read(),b[i]=read(),c[i]=read();
num[++ky]=a[i],num[++ky]=b[i];
if(a[i]>b[i]) swap(a[i],b[i]);
} sort(num+1,num+ky+1),ky=unique(num+1,num+ky+1)-num-1;
for(int i=1;i<=n;i++){
a[i]=lower_bound(num+1,num+ky+1,a[i])-num;
b[i]=lower_bound(num+1,num+ky+1,b[i])-num;
g[b[i]].pb(i);
} solve();
if(ans<=0) ans=0,L=R=1e9+1; cout<<ans<<endl;
printf("%d %d %d %d\n",L,L,R,R); return 0;
} /*
Σc[] + j - i
*/
Codeforces 1221 F Choose a Square的更多相关文章
- Codeforces 959 F. Mahmoud and Ehab and yet another xor task
\(>Codeforces\space959 F. Mahmoud\ and\ Ehab\ and\ yet\ another\ xor\ task<\) 题目大意 : 给出一个长度为 \ ...
- Codeforces 835 F. Roads in the Kingdom
\(>Codeforces\space835 F. Roads in the Kingdom<\) 题目大意 : 给你一棵 \(n\) 个点构成的树基环树,你需要删掉一条环边,使其变成一颗 ...
- Codeforces 731 F. Video Cards(前缀和)
Codeforces 731 F. Video Cards 题目大意:给一组数,从中选一个数作lead,要求其他所有数减少为其倍数,再求和.问所求和的最大值. 思路:统计每个数字出现的个数,再做前缀和 ...
- Codeforces 1187 F - Expected Square Beauty
F - Expected Square Beauty 思路:https://codeforces.com/blog/entry/68111 代码: #pragma GCC optimize(2) #p ...
- Codeforces 1221F. Choose a Square
传送门 对于某个点 $(x,y)$ ,不妨设 $x<y$ 因为如果 $x>y$ 直接按 $y=x$ 对称一下即可 当且仅当正方形左下角 $(a,a)$ 满足 $a<=x$,右上角 $ ...
- CodeForces 135 B. Rectangle and Square(判断正方形和 矩形)
题目:http://codeforces.com/problemset/problem/135/B 题意:给8个点 判断能否用 4个点构成正方形,另外4个点构成 矩形. 输出 第一行是正方形 ,第二行 ...
- Codeforces 715A & 716C Plus and Square Root【数学规律】 (Codeforces Round #372 (Div. 2))
C. Plus and Square Root time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- Codeforces 474 F. Ant colony
线段树求某一段的GCD..... F. Ant colony time limit per test 1 second memory limit per test 256 megabytes inpu ...
- Codeforces Round #423 B. Black Square
题目网址:http://codeforces.com/contest/828/problem/B 题目: Polycarp has a checkered sheet of paper of size ...
随机推荐
- nginx如何调用PHP(nginx+php运行原理)
采用nginx+php作为webserver的架构模式,在现如今运用相当广泛.然而第一步需要实现的是如何让nginx正确的调用php.由于nginx调用php并不是如同调用一个静态文件那么直接简单,是 ...
- SAS学习笔记40 SAS程序运行过程
当我们提交运行一个DATA步程序后,具体发生了什么事情. SAS程序与其他程序一样,在运行时都要经过两个阶段:编译(Compilation).执行(Execution) 程序首先经过编译阶段,该阶段主 ...
- SAS学习笔记12 SAS数据清洗和加工
set语句纵向合并 我们把a1和b1进行合并,并区分是来自哪个数据集,会用到in=选项 in=a是产生临时变量a,由于它是a1的选项,所以a的值=1(来自a1)或者=0(不来自a1) in=b是产生临 ...
- (转)从0移植uboot(六) _实现网络功能
ref:https://www.cnblogs.com/xiaojiang1025/p/6500532.html 为uboot添加网卡功能可以让uboot通过tftp下载内核, 方便我们的开发, 对于 ...
- 阿里数据迁移DTS【otter】和阿里巴巴mysql数据库binlog的增量订阅&消费组件 【canal】
[链接]alibaba/otterhttps://github.com/alibaba/otter https://github.com/alibaba/canal
- 【转载】在使用JDBC连接MySql时报错:You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support
在使用JDBC连接MySql时报错:You must configure either the server or JDBC driver (via the serverTimezone config ...
- 本地虚拟机NAT模式下怎么设置才可以访问外网
记:因为我要在本机虚拟机上安装Docker,结果发现虚拟机环境不能上网,是主机模式.我要调成net模式下才可以访问外网,这就需要怎么设置.下面文章记录一下. 在本机安装VMware软件后,系统中会自动 ...
- 五、小程序wx:key中的关键字*this
“保留关键字 *this 代表在 for 循环中的 item 本身,这种表示需要 item 本身是一个唯一的字符串或者数字,如果是对象则不可以 data:{ array:[1,2,3,4,5], ob ...
- Django 之一些request封装的常用功能
一些常用的request对象属性 介绍 HTTP 应用的信息是通过 请求报文 和 响应报文 传递的,关于更多的相关知识,可以阅读<HTTP权威指南>获得. 其中 请求报文 由客户端发送,其 ...
- 【转载】Android性能优化之渲染篇
下面是渲染篇章的学习笔记,欢迎大家一起学习交流! 1)Why Rendering Performance Matters 现在有不少App为了达到很华丽的视觉效果,会需要在界面上层叠很多的视图组件,但 ...