题意:n个左下角为原点右上角在第一象限的矩形不断覆盖,求最后形成的图形的周长

x和y是独立的,分别维护两棵线段树,一棵表示x坐标下最大的y值,另一棵表示y坐标下最大的x值

从覆盖的角度来考虑,如果逆序处理,当前处理的段的贡献为大于等于当前位置的最大值的差

比如一条横的线段i,坐标为[x1=0,x2],y

那它对答案的贡献为max(0,x2 - max_x of [y,maxy]),此时的区间存在的线段为逆序第n条到第i+1条

处理完后再插入到对应的线段树中即可(其实贡献为0的不插也行,因为都是不断取一个后缀最大的值)

#include<bits/stdc++.h>
#define rep(i,j,k) for(int i=j;i<=k;i++)
#define rrep(i,j,k) for(int i=j;i>=k;i--)
#define println(a) printf("%lld\n",(ll)(a))
#define printbk(a) printf("%lld ",(ll)(a))
typedef long long ll;
using namespace std;
const int MAXN = 2e5+11;
const ll oo = 0x3f3f3f3f3f3f3f3f;
const ll ooo= 0x3f3f3f3f;
const int MOD = 1e9+7;
ll read(){
ll x=0,f=1;register char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
struct ST{
#define lc o<<1
#define rc o<<1|1
ll mx[MAXN<<2];
void pu(int o){
mx[o]=max(mx[lc],mx[rc]);
}
void update(int o,int l,int r,int k,ll v){
if(l==r){
mx[o]=max(mx[o],v);
return;
}
int mid=l+r>>1;
if(k<=mid) update(lc,l,mid,k,v);
else update(rc,mid+1,r,k,v);
pu(o);
}
ll query(int o,int l,int r,int L,int R){
if(L<=l&&r<=R) return mx[o];
int mid=l+r>>1;
ll ans=0;
if(L<=mid) ans=max(ans,query(lc,l,mid,L,R));
if(R>mid) ans=max(ans,query(rc,mid+1,r,L,R));
return ans;
}
}st[2]; struct QAQ{
int x, y;
int _x,_y;
QAQ(int Q=0,int A=0){
x=Q;
y=A;
}
}a[MAXN];
int xx[MAXN],yy[MAXN],n;
int main(){
while(cin>>n){
int cnt=0;
rep(i,1,n){
int x=read();
int y=read();
a[i]=QAQ(x,y);
xx[++cnt]=x;
yy[cnt]=y;
}
sort(xx+1,xx+1+cnt);
sort(yy+1,yy+1+cnt);
rep(i,1,n){
a[i]._x=lower_bound(xx+1,xx+1+cnt,a[i].x)-xx;
a[i]._y=lower_bound(yy+1,yy+1+cnt,a[i].y)-yy;
}
rep(i,0,1) memset(st[i].mx,0,sizeof st[i].mx);
//st[0]: x坐标下最大的y
//st[1]: y坐标下最大的x
ll ans=0;
rrep(i,n,1){
int x=a[i].x;
int y=a[i].y;
int xid=a[i]._x;
int yid=a[i]._y;
ll t1=st[1].query(1,1,cnt,yid,cnt);
if(t1<x) ans+=x-t1;
st[1].update(1,1,cnt,yid,x);
ll t2=st[0].query(1,1,cnt,xid,cnt);
if(t2<y) ans+=y-t2;
st[0].update(1,1,cnt,xid,y);
}
println(ans);
}
return 0;
}

2018徐州网络赛 - Trace的更多相关文章

  1. ACM-ICPC 2018徐州网络赛-H题 Ryuji doesn't want to study

    死于update的一个long long写成int了 真的不想写过程了 ******** 树状数组,一个平的一个斜着的,怎么斜都行 题库链接:https://nanti.jisuanke.com/t/ ...

  2. 2018徐州网络赛H. Ryuji doesn't want to study

    题目链接: https://nanti.jisuanke.com/t/31458 题解: 建立两个树状数组,第一个是,a[1]*n+a[2]*(n-1)....+a[n]*1;第二个是正常的a[1], ...

  3. 2018 ICPC 徐州网络赛

    2018 ICPC 徐州网络赛 A. Hard to prepare 题目描述:\(n\)个数围成一个环,每个数是\(0\)~\(2^k-1\),相邻两个数的同或值不为零,问方案数. solution ...

  4. 2018 CCPC网络赛

    2018 CCPC网络赛 Buy and Resell 题目描述:有一种物品,在\(n\)个地点的价格为\(a_i\),现在一次经过这\(n\)个地点,在每个地点可以买一个这样的物品,也可以卖出一个物 ...

  5. 计蒜客 41391.query-二维偏序+树状数组(预处理出来满足情况的gcd) (The Preliminary Contest for ICPC Asia Xuzhou 2019 I.) 2019年徐州网络赛)

    query Given a permutation pp of length nn, you are asked to answer mm queries, each query can be rep ...

  6. ICPC 2019 徐州网络赛

    ICPC 2019 徐州网络赛 比赛时间:2019.9.7 比赛链接:The Preliminary Contest for ICPC Asia Xuzhou 2019 赛后的经验总结 // 比赛完才 ...

  7. [徐州网络赛]Longest subsequence

    [徐州网络赛]Longest subsequence 可以分成两个部分,前面相同,然后下一个字符比对应位置上的大. 枚举这个位置 用序列自动机进行s字符串的下标转移 注意最后一个字符 #include ...

  8. 徐州网络赛F-Feature Trace【暴力】

    Morgana is learning computer vision, and he likes cats, too. One day he wants to find the cat moveme ...

  9. 徐州网络赛G-Trace【线段树】

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

随机推荐

  1. MyEclipse文件查找技巧

    只为成功找方法,不为失败找借口! MyEclipse使用总结——MyEclipse文件查找技巧 一.查找文件 使用快捷键[ctrl+shift+R]弹出弹出文件查找框,如下图所示: 二.查找包含某个字 ...

  2. UVa 247 Calling Circles (DFS+Floyd)

    题意:如果两个人互通电话,那么他们就在一个电话圈里,现在给定 n 个人,并且给定 m 个通话记录,让你输出所有的电话圈. 析:刚开始没想到是Floyd算法,后来才知道是这个算法,利用这个算法进行连通性 ...

  3. (广搜)Catch That Cow -- poj -- 3278

    链接: http://poj.org/problem?id=3278 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6211 ...

  4. 23 DesignPatterns学习笔记:C++语言实现 --- 2.5 Factory

    23 DesignPatterns学习笔记:C++语言实现 --- 2.5 Factory 2016-07-18 (www.cnblogs.com/icmzn) 模式理解   1. Flyweight ...

  5. 个人介绍&我的GitHub注册经历&初步使用

    (1)个人介绍 我叫刘雨恬,目前是南通大学计科院网络工程141班的一名大二的学生,学号1413042004.由于学习软件工程的需要,我注册了cnblogs的这个博客账号,方便以后的学习交流.在兴趣爱好 ...

  6. 使用testNGListenter来自定义日志

    背景 用testNG写用例的时候,只是打印了请求的日志,没有打印这个用例的开始和结束的标识,想加上这个标识这样更好的排查问题 这种日志是加在用例开始执行和结束,相当于spring中的AOP功能,今天翻 ...

  7. asp.net——上传图片生成缩略图

    上传图片生成缩略图,原图和缩略图地址一样的时候缩略图会把原图覆盖掉 /// <summary> /// 生成缩略图 /// </summary> /// <param n ...

  8. leetcode 字符串转整数(atoi)

    实现atoi,将字符串转为整数. 在找到第一个非空字符之前,需要移除掉字符串中的空格字符.如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符即为整数的值. ...

  9. Monthly数据类型

    Monthly由来 最近在做关于智能财税的项目,大量用到了账期相关的数据操作.项目已有两年历史了,对于账期数据,前辈们用的是DateTime数据类型,即每个月的最后一天就是账期.而用DateTime来 ...

  10. Oracle数据库02

    EXISTS子查询 特征:将主查询中的数据带到子查询中进行验证,如果验证成功则子查询返回true,当主查询接收到true的时候被验证的数据就显示,如果在子查询中验证失败则返回false,当主查询接收到 ...