题面

不知道大佬们怎么想的,反正我看到这种区间包含性质的并且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的更多相关文章

  1. Codeforces 959 F. Mahmoud and Ehab and yet another xor task

    \(>Codeforces\space959 F. Mahmoud\ and\ Ehab\ and\ yet\ another\ xor\ task<\) 题目大意 : 给出一个长度为 \ ...

  2. Codeforces 835 F. Roads in the Kingdom

    \(>Codeforces\space835 F. Roads in the Kingdom<\) 题目大意 : 给你一棵 \(n\) 个点构成的树基环树,你需要删掉一条环边,使其变成一颗 ...

  3. Codeforces 731 F. Video Cards(前缀和)

    Codeforces 731 F. Video Cards 题目大意:给一组数,从中选一个数作lead,要求其他所有数减少为其倍数,再求和.问所求和的最大值. 思路:统计每个数字出现的个数,再做前缀和 ...

  4. Codeforces 1187 F - Expected Square Beauty

    F - Expected Square Beauty 思路:https://codeforces.com/blog/entry/68111 代码: #pragma GCC optimize(2) #p ...

  5. Codeforces 1221F. Choose a Square

    传送门 对于某个点 $(x,y)$ ,不妨设 $x<y$ 因为如果 $x>y$ 直接按 $y=x$ 对称一下即可 当且仅当正方形左下角 $(a,a)$ 满足 $a<=x$,右上角 $ ...

  6. CodeForces 135 B. Rectangle and Square(判断正方形和 矩形)

    题目:http://codeforces.com/problemset/problem/135/B 题意:给8个点 判断能否用 4个点构成正方形,另外4个点构成 矩形. 输出 第一行是正方形 ,第二行 ...

  7. 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 ...

  8. Codeforces 474 F. Ant colony

    线段树求某一段的GCD..... F. Ant colony time limit per test 1 second memory limit per test 256 megabytes inpu ...

  9. Codeforces Round #423 B. Black Square

    题目网址:http://codeforces.com/contest/828/problem/B 题目: Polycarp has a checkered sheet of paper of size ...

随机推荐

  1. gin PostForm 方法不起作用

    情景: 在httpie post 下,在 axios post下,总的来说,就是在form-data下只有c.Bind()会有用 如果一定要用c.PostForm() headers必须为x-www- ...

  2. css 小图标 & iconfont 字体图标

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! iconfont 字体图标 我们的需求中,很多时候会看到一些小的图形,或者叫图标,比如天猫网站中:     ...

  3. 使用github经验

    使用github经验 良好的使用习惯,就像是每天来看朋友圈一样,不一定每天都有东西要提交,但是一定要一直有一个 repository 在维护,持续的提交代码.同时也要注意自己的 repository的 ...

  4. JSP JSONArray使用遇坑!添加以下6个jar包

    1.JAR包简介 要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: commons-lang.jar commons-beanutils.jar commons ...

  5. luogu2657-Windy数题解--数位DP

    题目链接 https://www.luogu.org/problemnew/show/P2657 分析 第一道数位DP题,发现有点意思 DP求\([L,R]\)区间内的XXX个数,很套路地想到前缀和, ...

  6. 安装Nvida 显示环境

    查看是否能正确加载nvidia 驱动 在终端输入 (glxinfo 需要安装mesa-utils) 如果可以正确加载了nvidia驱动 那么在输入的内容中可以看到NVIDIA 字样 如果GPU是Int ...

  7. 2、JDK8中的HashMap实现原理及源码分析

    本篇提纲.png 本篇所述源码基于JDK1.8.0_121 在写上一篇线性表的文章的时候,笔者看的是Android源码中support24中的Java代码,当时发现这个ArrayList和Linked ...

  8. 把zTree前的展开收起图标改为三角形,且只有在点击三角形图标时才展开子节点解决方案

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta ht ...

  9. TODO页面

    功能:1.根据数据显示当前所未完成的事件, 2.可通过输入框进行事件的添加,可标记已完成的事件并进行删除,可修改已添加的事件. ps:插件引入均使用本地文件,需改用静态CDN. 效果: 代码实现: & ...

  10. iOS自定义一个仿网易左右滑动切换页面框架

    FSScrollContentView github:https://github.com/shunFSKi/FSScrollContentView 这是本人在整理项目时抽离了业务代码整理封装的一个通 ...