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,询问 ...
随机推荐
- React 入门实例教程【转】
Any day will do. 哪一天都行 Are you kidding? 你在开玩笑吧! Congratulations! 祝贺你! I don’t mean it. 我不是故意的. 原文作者: ...
- css重要知识点
1.float:left;表示靠左显示.它是相对于距离最近的且以relative作为position的父元素而言的. 2.块级元素和行内元素 块级元素:占据了一个矩形框的元素,display属性的值为 ...
- 如何查看Chrome浏览器保存的账号密码
之前告诉大家如何一键查看所有保存在IE里的所有密码(点击查看原文),现在来告诉大家如何一键查看Chrome浏览器的所有密码.某种意义上上,查看Chrome的密码比查看IE的更简单,因为查看IE密码还需 ...
- go语言使用go-sciter创建桌面应用(四) 固定窗口大小
有些时候我们需要创建的应用窗口大小不可改变. demo5.go代码如下: package main; import ( "github.com/sciter-sdk/go-sciter/wi ...
- Oracle性能优化3-sql优化一定要等价
做sql优化的前提瞧见是sql等价 1.MAX MIN写法的分与合 drop table t purge; create table t as select * from dba_objects; a ...
- C#百度图片识别API调用返回数据包解析
百度图片识别api接口 public static JObject GeneralBasic(string apikey,string secretkey,string path) { var cli ...
- sublime 注释模版插件DocBlockr的使用
一.gihub地址 https://github.com/spadgos/sublime-jsdocs/ 其中有使用的教程可以参考 二.配置示例 安装教程此处略,请自行查找教程 jsdocs_extr ...
- Java 7.35 游戏:猜字游戏(C++&Java)
Ps: 有人可能好奇我为什么大费周章的去写主函数,而不直接把所有操作放在类中,Why?类就好比骨干(存放核心的数据和功能),最好提供接口, 避免了类中的输入输出,当然,这也不是绝对的. C++: #i ...
- Numpy 索引
1.一维索引 >>> import numpy as np >>> A = np.arange(3,15) >>> print(A[3]) 6 & ...
- gcd(欧几里得算法)
基础 int gcd(int a,int b) { int r; ) { r=a%b; a=b; ...