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,询问 ...
随机推荐
- 使用vue-cli快速搭建大型单页应用
前言: 经过一段时间angular的洗礼之后 ,还是决定回归Vue.现就vue安装.工程搭建.常用依赖安装直至开发挣个流程做一整理,希望对初学者有所帮助. 前提条件: 对 Node.js 和相关构建工 ...
- Json、JavaBean、String等互转
Json.JavaBean.String等互转 本文介绍简单的Json.JavaBean.String互换(下文JavaBean简称Object对象,这里不是很严谨) 转换关系如下: 其中String ...
- HTML基础学习笔记(1)
HTML学习笔记(1) 1.常用快捷键 win+d---返回桌面 win+e---我的电脑 win+r---打开运行 Alt+tab---切换软件 ctrl+tab---切换软件文档 F2---重命名 ...
- MySQL安装(windows版本)
1.下载.MySQL http://dev.mysql.com/downloads/mysql/ 下载windows的zip包,解压后,添加path路径bin, 系统环境变量->path-> ...
- 33-Java中的String,StringBuilder,StringBuffer三者的区别
转载自:https://www.cnblogs.com/su-feng/p/6659064.html StringBuilder 详解 (String系列之2) Java中的String,String ...
- transaction注解分析
1. Spring事务的基本原理 事务管理是应用系统开发中必不可少的一部分.Spring 为事务管理提供了丰富的功能支持.Spring 事务管理分为编码式和声明式的两种方式.编程式事务指的是通过编码方 ...
- mysql定位慢查询
mysql定位慢查询 //显示数据库的状态 show status; //显示执行了多少次插入 show status like 'com_insert'; //显示执行了多少次更新 show sta ...
- input,textarea在ios和Android上阴影和边框的处理方法(在移动端)
1.去掉ios上阴影的方法只需要在css文件上添加input,textarea{-webkit-appearance: none;}就可以了 2.在移动端上input和textarea边框问题,也是在 ...
- Windows删除服务方法
- POJ2728 Desert King
一道生成树+\(0/1\)分数规划 原题链接 设每条边的距离为\(dis[x]\),两点高度差为\(h[x]\),该图的生成树为\(T\),则题目实际求的就是\(\dfrac{\sum\limits_ ...