https://nanti.jisuanke.com/t/31459

思路

  • 凡是后面的轨迹对前面的轨迹有影响的,可以尝试从后往前扫
  • 区间修改需要push_down,单点更新所以不需要push_up(用于区间查询)
  • 多颗线段树的时候将函数写进结构体里,这样所有函数只需要写一次了
#include<bits/stdc++.h>
#define pb push_back
#define M 100005
using namespace std;
int n,i,x[M],y[M],sz,tp;
long long ans;
vector<int>p;
struct N{
int ma[M<<2];
void push_down(int o){
if(ma[o]>ma[o<<1])ma[o<<1]=ma[o];
if(ma[o]>ma[o<<1|1])ma[o<<1|1]=ma[o];
ma[o]=0;
}
void bd(int o,int l,int r){
ma[o]=0;
if(l==r)return;
int mid=(l+r)/2;
bd(o<<1,l,mid);bd(o<<1|1,mid+1,r);
}
void ud(int o,int l,int r,int L,int R,int x){
if(L<=l&&r<=R){ma[o]=max(ma[o],x);return ;}
push_down(o);
int mid=(l+r)/2;
if(L<=mid)ud(o<<1,l,mid,L,R,x);
if(R>mid)ud(o<<1|1,mid+1,r,L,R,x);
}
int qy(int o,int l,int r,int pos){
if(l==r)return ma[o];
push_down(o);
int mid=(l+r)/2;
if(pos<=mid)return qy(o<<1,l,mid,pos);
return qy(o<<1|1,mid+1,r,pos);
}
}X,Y;
int id(int x){return lower_bound(p.begin(),p.begin()+sz,x)-p.begin()+1;} int main(){
scanf("%d",&n);p.clear();
for(i=1;i<=n;i++){
scanf("%d%d",&x[i],&y[i]);
p.pb(x[i]);p.pb(y[i]);
}
sort(p.begin(),p.end());
sz=unique(p.begin(),p.end())-p.begin();
X.bd(1,1,sz);Y.bd(1,1,sz);
ans=0;
for(i=n;i>=1;i--){
tp=X.qy(1,1,sz,id(y[i]));
if(x[i]>tp){
ans+=x[i]-tp;
X.ud(1,1,sz,1,id(y[i]),x[i]);
}
tp=Y.qy(1,1,sz,id(x[i]));
if(y[i]>tp){
ans+=y[i]-tp;
Y.ud(1,1,sz,1,id(x[i]),y[i]);
}
}
cout<<ans<<endl;
}

ACM-ICPC 2018 徐州赛区网络预赛 G Trace(逆向,两颗线段树写法)的更多相关文章

  1. ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心)

    ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心) Trace 问答问题反馈 只看题面 35.78% 1000ms 262144K There's a beach in t ...

  2. ACM-ICPC 2018 徐州赛区网络预赛 G Trace(思维+set)

    https://nanti.jisuanke.com/t/31459 题意 n个矩阵,不存在包含,矩阵左下角都在(0,0),给右上角坐标,后来的矩阵会覆盖前面的矩阵,求矩阵周长. 分析 set按照x或 ...

  3. ACM-ICPC 2018 徐州赛区网络预赛 G. Trace

    There's a beach in the first quadrant. And from time to time, there are sea waves. A wave ( xx , yy  ...

  4. ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (set维护)

    注意题目保证不会有一个矩形完全包括另一个矩形的情况 时间序上从后往前看,一个坐标\((x,y)\)加进来之前,如果已经有\(x_i<x\),则对结果的贡献为\(x-x_i\);若不存在\(x_i ...

  5. ACM-ICPC 2018 徐州赛区网络预赛 G. Trace【树状数组维护区间最大值】

    任意门:https://nanti.jisuanke.com/t/31459 There's a beach in the first quadrant. And from time to time, ...

  6. ACM-ICPC 2018 徐州赛区网络预赛-G Trace(线段树的应用

    Problem:Portal传送门 Problem:Portal传送门  原题目描述在最下面.  我理解的题意大概是:有n次涨潮和退潮,每次的范围是个x×y的矩形,求n次涨退潮后,潮水痕迹的长度.   ...

  7. ACM-ICPC 2018 徐州赛区网络预赛 G. Trace-树状数组-区间修改,单点查询

    赛后和队友讨论了一波,感谢无敌的队友给我细心的讲题 先埋坑 #include<iostream> #include<string.h> #include<algorith ...

  8. ACM-ICPC 2018 徐州赛区网络预赛 G题

    题目链接: https://nanti.jisuanke.com/t/31459 具体思路: 先顺序输入,然后回溯,假设已经加入了n个点,那么在加入的同时,首先看一下原先x轴上已经有过的点,找到第一个 ...

  9. ACM-ICPC 2018 徐州赛区网络预赛 HRyuji doesn't want to study 树状数组

    题目链接:https://nanti.jisuanke.com/t/A2007 题目大意:有一个序列含有n个数a[1],a[2],a[3],……a[n],有两种操作: 第一种操作:k=1,l,r,询问 ...

随机推荐

  1. 【linux命令总结】——后续用到的内容持续补充和更新

    比如说:某个文件是go文件,名字叫做 Hello.go 1.通过后台运行某个程序,将结果输出到某个文件, 如果是直接运行go程序:go run Hello.go 后台运行:nohup go run H ...

  2. C++ 智能指针shared_ptr的实现

    #include <memory> #include <iostream> using namespace std; template<typename T> cl ...

  3. Dom,pull,Sax解析XML

    本篇随笔将详细讲解如何在Android当中解析服务器端传过来的XML数据,这里将会介绍解析xml数据格式的三种方式,分别是DOM.SAX以及PULL. 一.DOM解析XML 我们首先来看看DOM(Do ...

  4. js DomContentLoaded 和 load 的区别

    如题:DOMContentLoaded和load都是页面加载的时候触发的事件.区别在于触发的时机不一样. 浏览器渲染页面DOM文档加载的步骤: 1.解析HTML结构. 2.加载外部脚本和css文件. ...

  5. pyspider入门

    1.http://www.pyspider.cn/jiaocheng/pyspider-webui-12.html 2.https://blog.csdn.net/weixin_37947156/ar ...

  6. JAVA程序 从命令行接受多个数字,求和之后输出结果

    源程序代码: public class sum{ public static void main(String[] args){ double[] a=new double[4]; a[0]=Doub ...

  7. C# 通过api函数GetPrivateProfileString读取ini文件,取不到值

    通过api函数GetPrivateProfileString读取ini文件,取不到值,测试了好长时间,都不行 确认程序,ini文件都没有错误的情况,最后发现是ini文件编码的原因. 将ini文件的编码 ...

  8. angular2.0学习笔记3.了解angular2.0项目结构

    1.我们应用的代码都位于src文件中,包括所有的组件.模板.样式.图片以及我们的应用所需的任何东西都在这个文件来里. 2.src这个文件夹之外的文件都是为构建应用提供支持用的. src文件夹及用途说明 ...

  9. iOS.ChangeIniOS7

    1. Multitasking in iOS 7 http://www.objc.io/issue-5/multitasking.html http://www.slideshare.net/mrem ...

  10. mac/linux 修改vim显示信息

    转自:http://www.cnblogs.com/yjmyzz/p/4019783.html 步骤1: cp /usr/share/vim/vimrc ~/.vimrc 先复制一份vim配置模板到个 ...