ACM-ICPC 2018 徐州赛区网络预赛 G Trace(逆向,两颗线段树写法)
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(逆向,两颗线段树写法)的更多相关文章
- ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心)
ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心) Trace 问答问题反馈 只看题面 35.78% 1000ms 262144K There's a beach in t ...
- ACM-ICPC 2018 徐州赛区网络预赛 G Trace(思维+set)
https://nanti.jisuanke.com/t/31459 题意 n个矩阵,不存在包含,矩阵左下角都在(0,0),给右上角坐标,后来的矩阵会覆盖前面的矩阵,求矩阵周长. 分析 set按照x或 ...
- 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 ...
- ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (set维护)
注意题目保证不会有一个矩形完全包括另一个矩形的情况 时间序上从后往前看,一个坐标\((x,y)\)加进来之前,如果已经有\(x_i<x\),则对结果的贡献为\(x-x_i\);若不存在\(x_i ...
- ACM-ICPC 2018 徐州赛区网络预赛 G. Trace【树状数组维护区间最大值】
任意门:https://nanti.jisuanke.com/t/31459 There's a beach in the first quadrant. And from time to time, ...
- ACM-ICPC 2018 徐州赛区网络预赛-G Trace(线段树的应用
Problem:Portal传送门 Problem:Portal传送门 原题目描述在最下面. 我理解的题意大概是:有n次涨潮和退潮,每次的范围是个x×y的矩形,求n次涨退潮后,潮水痕迹的长度. ...
- ACM-ICPC 2018 徐州赛区网络预赛 G. Trace-树状数组-区间修改,单点查询
赛后和队友讨论了一波,感谢无敌的队友给我细心的讲题 先埋坑 #include<iostream> #include<string.h> #include<algorith ...
- ACM-ICPC 2018 徐州赛区网络预赛 G题
题目链接: https://nanti.jisuanke.com/t/31459 具体思路: 先顺序输入,然后回溯,假设已经加入了n个点,那么在加入的同时,首先看一下原先x轴上已经有过的点,找到第一个 ...
- 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,询问 ...
随机推荐
- RxJS之BehaviorSubject
Subject 的其中一个变体就是 BehaviorSubject,它有一个“当前值”的概念.它保存了发送给消费者的最新值.并且当有新的观察者订阅时,会立即从 BehaviorSubject 那接收到 ...
- ATM取款机系统代码及此次作业感受
本次乃我们软件工程专业开学第一个小测试,本来以为是和之前2016级相同的或者类似得软件,所以之前学了好久的那个程序完全失去了它的作用,当然了老师也从来没有按套路出过牌,所以这个下马威我觉得作用起到了. ...
- 自编辑列的gridview,分页,删除,点击删除提示“确认”
分页: gridview的属性中:AllowPaging="True" PageSize="2" 找到gridview的PageIndexChan ...
- 配置eclipse+SDK+ADT开发环境
第一步:配置jdk和eclipse环境(已完成): 第二步:ADT配置:依次点击菜单栏:help -> Install new software -> Add -> Local... ...
- AndroidManifest中注册application
<application android:icon="@drawable/icon1" android:label="@string/app_name" ...
- 使用PHP来简单的创建一个RPC服务
RPC全称为Remote Procedure Call,翻译过来为"远程过程调用".主要应用于不同的系统之间的远程通信和相互调用. 比如有两个系统,一个是PHP写的,一个是JAVA ...
- tomcat用虚拟目录方式发布项目
conf/Catalina/localhost:指定项目的配置信息 1.添加:ROOT.xml 听见Context节点: <Context docBase="/usr/local/to ...
- ListView的自定义适配器及其优化(listView序号混乱问题的处理)
ListView是最常使用的android组件之一,关于listView的优化问题刚刚了解了一些,在这里做出总结. PS:如果想让ListView中的item根据数据内容显示item的大小,需要在it ...
- OpenGL3D图形、旋转、纹理、键盘移动、光照、滤波、透明(完整) 转自http://www.cnblogs.com/tiandsp/archive/2012/01/23/2329049.html
#include <windows.h> // Windows的头文件 #include <stdio.h> #include <gl\gl.h> // OpenG ...
- PAT 1087 有多少不同的值(20)(STL-set代码)
1087 有多少不同的值(20 分) 当自然数 n 依次取 1.2.3.--.N 时,算式 ⌊n/2⌋+⌊n/3⌋+⌊n/5⌋ 有多少个不同的值?(注:⌊x⌋ 为取整函数,表示不超过 x 的最大自然数 ...