spoj mpoint
题解:
判断每一次加进来的时候有几个被破坏,几个添加
然后单调栈维护
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=;
int n,j,k,ans=,now,oo=;
struct note{int x,y,id;}a[N],b[N];
bool cmp(const note i,const note j){return i.x<j.x;}
struct stack
{
note e[N]; int l,h,t;
void pre(int z){l=;h=t=;e[].x=now;e[].y=oo*z;}
void add(note a,bool z){if ((a.y<e[l].y)^z)e[++l]=a;}
void Xwork(int x,bool z){while (h<=l&&((e[h].x<x)^z))h++;h?h--:;}
void Ywork(int y,bool z){while (t<=l&&((e[t].y<y)^z))t++;}
}c1,c2,c3,c4;
int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++)scanf("%d%d",&a[i].x,&a[i].y),a[i].id=i;
memcpy(b,a,sizeof(b));
std::sort(b+,b+n+,cmp);
for (int i=;i<=n;i++)
{
now=a[i].x;c1.pre(),c2.pre();c3.pre(-),c4.pre(-);
for (k=;k<=n&&b[k].x<a[i].x;k++);
for (j=k-;j;j--)
if (b[j].id<i)
if (b[j].y>a[i].y) c2.add(b[j],);
else c3.add(b[j],);
for (j=k;j<=n;j++)
if (b[j].id<i)
if (b[j].y>a[i].y) c1.add(b[j],);
else c4.add(b[j],);
ans+=c1.l+c2.l+c3.l+c4.l;
for (int j=;j<=c1.l;j++)
{
int x=c1.e[j].x,y=c1.e[j].y,xx,yy;
if (!c3.l) continue;
c2.Ywork(y,);xx=c2.e[c2.t].x;
if (c2.t>c2.l) xx=-oo;c3.Xwork(xx,);
c4.Xwork(x,);yy=c4.e[c4.h].y;c3.Ywork(yy,);
c3.h>c3.l?c3.h--:;c3.t?:c3.t++;
ans-=max(c3.h-c3.t+,);
}
c2.h=c2.t=c3.h=c3.t=c4.h=c4.t=;
for (int j=;j<=c4.l;j++)
{
int x=c4.e[j].x,y=c4.e[j].y,xx,yy;
if (!c2.l) continue;
c3.Ywork(y,);xx=c3.e[c3.t].x;
if (c3.t>c3.l) xx=-oo;c2.Xwork(xx,);
c1.Xwork(x,);yy=c1.e[c1.h].y;c2.Ywork(yy,);
c2.h>c2.l?c2.h--:;c2.t?:c2.t++;ans-=max(c2.h-c2.t+,);
}
printf("%d\n",ans);
}
return ;
}
spoj mpoint的更多相关文章
- BZOJ 2588: Spoj 10628. Count on a tree [树上主席树]
2588: Spoj 10628. Count on a tree Time Limit: 12 Sec Memory Limit: 128 MBSubmit: 5217 Solved: 1233 ...
- SPOJ DQUERY D-query(主席树)
题目 Source http://www.spoj.com/problems/DQUERY/en/ Description Given a sequence of n numbers a1, a2, ...
- SPOJ GSS3 Can you answer these queries III[线段树]
SPOJ - GSS3 Can you answer these queries III Description You are given a sequence A of N (N <= 50 ...
- 【填坑向】spoj COT/bzoj2588 Count on a tree
这题是学主席树的时候就想写的,,, 但是当时没写(懒) 现在来填坑 = =日常调半天lca(考虑以后背板) 主席树还是蛮好写的,但是代码出现重复,不太好,导致调试的时候心里没底(虽然事实证明主席树部分 ...
- SPOJ bsubstr
题目大意:给你一个长度为n的字符串,求出所有不同长度的字符串出现的最大次数. n<=250000 如:abaaa 输出: 4 2 1 1 1 spoj上的时限卡的太严,必须使用O(N)的算法那才 ...
- 【SPOJ 7258】Lexicographical Substring Search
http://www.spoj.com/problems/SUBLEX/ 好难啊. 建出后缀自动机,然后在后缀自动机的每个状态上记录通过这个状态能走到的不同子串的数量.该状态能走到的所有状态的f值的和 ...
- 【SPOJ 1812】Longest Common Substring II
http://www.spoj.com/problems/LCS2/ 这道题想了好久. 做法是对第一个串建后缀自动机,然后用后面的串去匹配它,并在走过的状态上记录走到这个状态时的最长距离.每匹配完一个 ...
- 【SPOJ 8222】Substrings
http://www.spoj.com/problems/NSUBSTR/ clj课件里的例题 用结构体+指针写完模板后发现要访问所有的节点,改成数组会更方便些..于是改成了数组... 这道题重点是求 ...
- SPOJ GSS2 Can you answer these queries II
Time Limit: 1000MS Memory Limit: 1572864KB 64bit IO Format: %lld & %llu Description Being a ...
随机推荐
- Raphael.js--基础1
Raphael.js 特点: 1.兼容VML和SVG 2.扩展功能——动画 用法: //1.创建画布 let paper=Raphael(x,y,width,height); //2.创建形状 let ...
- js--深拷贝与浅拷贝
对象:只针对于Object和Array这样的引用数据类型 说明:浅拷贝只复制指向某个对象的指针,而不是复制对象的本身,新旧对象还是共享一块内存.但深拷贝会另外创造一个一模一样的对象,新的对象跟原对象不 ...
- uirecorder 启动webdriver服务报错
在安装好uirecorder后,执行起来是各种错误. 不是少这个就是缺那个,也是因为自己对自动化测试知识太匮乏. 导致刚开始走自动化测试绕了很多弯路,报个错都不知所措.后来才知道要多看ERROR后面的 ...
- Lesson 02-Linux基础命令(一)
查看系统IP Linux:ifconfig/ip a Windows:ipconfig vi:创建文件并编辑 touch:创建空文件 mkdir ~/a 在用户家目录下创建名称为a的文件夹 -p 创建 ...
- 课后作业机票,赌骰子游戏,switch的使用实例
一,课后第三题机票 package com.bd22; import java.util.Scanner; public class AirTicket { public static void ma ...
- javascript 之 函数
注意:函数名仅仅是一个包含指针的变量而已 函数内部属性 arguments 和this 两个特殊对象 arguments:类数组对象,包含出入函数中的所有参数,主要用途是保存函数参数 callee:该 ...
- Lintcode487-Name Deduplication-Easy
487. Name Deduplication Given a list of names, remove the duplicate names. Two name will be treated ...
- 一键快速部署CodeBlocks的EGE图形库工具
大一下学期,学完了c语言的基本内容, 也就开始开发项目了,此时一个图形界面就比较重要了,c语言中不提供图形界面,一般这些是用的其它开发的图形库,如 Easyx .ege等. 本文就提供 Codeblo ...
- python自动化测试常用断言的使用方法
自动化测试中寻找元素并进行操作,如果在元素好找的情况下,大家就可以较熟练地编写用例脚本了,但光进行操作可能还不够,有时候也需要对预期结果进行判断. 下面介绍几个常用断言的使用方法,可以一定程度上帮助大 ...
- idea Debug快捷键
快捷键 介绍 F7 在 Debug 模式下,进入下一步,如果当前行断点是一个方法,则进入当前方法体内, 如果该方法体还有方法,则不会进入该内嵌的方法中 * F8 在 Debug 模式下,进入下一步,如 ...