洛谷P1856 [USACO5.5]矩形周长Picture
题目背景
墙上贴着许多形状相同的海报、照片。它们的边都是水平和垂直的。每个矩形图片可能部分或全部的覆盖了其他图片。所有矩形合并后的边长称为周长。
题目描述
编写一个程序计算周长。
如图1所示7个矩形。
如图2所示,所有矩形的边界。所有矩形顶点的坐标都是整数。
输入输出格式
输入格式:
输入文件的第一行是一个整数N(0<=N<5000),表示有多少个矩形。接下来N行给出了每一个矩形左下角坐标和右上角坐标(所有坐标的数值范围都在-10000到10000之间)。
输出格式:
输出文件只有一个正整数,表示所有矩形的周长。
输入输出样例
7 -15 0 5 10 -5 8 20 25 15 -4 24 14 0 -6 16 4 2 15 10 22 30 10 36 20 34 0 40 16
228
扫描线线段树
其实能够找到的一些题解的线段树都暴力的很,如果稍微数据强一点就能卡,但是这题数据实在是太弱了QAQ
1 #include<cstdio> 2 #include<cstdlib> 3 #include<algorithm> 4 #include<cstring> 5 #include<vector> 6 #define MAXN 5005 7 #define MAXM 10005 8 #define X first 9 #define Y second 10 #define pii pair<int,int> 11 using namespace std; 12 int read(){ 13 int x=0,f=1;char ch=getchar(); 14 while(ch<'0'||ch>'9'){if('-'==ch)f=-1;ch=getchar();} 15 while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} 16 return x*f; 17 } 18 struct Node{ 19 int L,R,p,b; 20 Node(int p1=0,int p2=0,int p3=0,int p4=0){ 21 L=p1,R=p2,p=p3,b=p4; 22 } 23 }; 24 bool comp(const Node &p1,const Node &p2){ 25 if(p1.p!=p2.p){ 26 return (p1.p<p2.p); 27 } 28 else{ 29 return (p1.b>p2.b); 30 } 31 } 32 int n; 33 vector<Node> vx,vy; 34 void init(){ 35 n=read(); 36 for(int i=1;i<=n;i++){ 37 int x1=read(),y1=read(),x2=read(),y2=read(); 38 x1+=10001,y1+=10001,x2+=10001,y2+=10001; 39 vx.push_back(Node(x1,x2,y1,1));vx.push_back(Node(x1,x2,y2,-1)); 40 vy.push_back(Node(y1,y2,x1,1));vy.push_back(Node(y1,y2,x2,-1)); 41 } 42 sort(vx.begin(),vx.end(),comp);sort(vy.begin(),vy.end(),comp); 43 n=10000*2; 44 } 45 int dat[MAXM<<3],tag[MAXM<<3]; 46 void pushdown(int k){ 47 int lc=(k<<1),rc=(k<<1|1); 48 dat[lc]+=tag[k],dat[rc]+=tag[k]; 49 tag[lc]+=tag[k],tag[rc]+=tag[k]; 50 tag[k]=0; 51 } 52 void pushup(int k){ 53 dat[k]=min(dat[k<<1],dat[k<<1|1]); 54 } 55 void add(int a,int b,int k,int L,int R,int x){ 56 if(b<=L||R<=a){ 57 return; 58 } 59 else if(a<=L&&R<=b){ 60 dat[k]+=x; 61 tag[k]+=x; 62 } 63 else{ 64 if(tag[k]){ 65 pushdown(k); 66 } 67 add(a,b,k<<1,L,(L+R)>>1,x); 68 add(a,b,k<<1|1,(L+R)>>1,R,x); 69 pushup(k); 70 } 71 } 72 int query(int a,int b,int k,int L,int R){ 73 if(b<=L||R<=a){ 74 return 0; 75 } 76 if(L+1==R){ 77 return (dat[k]?1:0); 78 } 79 else if(a<=L&&R<=b&&dat[k]){ 80 return R-L; 81 } 82 else{ 83 if(tag[k]){ 84 pushdown(k); 85 } 86 int lc=query(a,b,k<<1,L,(L+R)>>1); 87 int rc=query(a,b,k<<1|1,(L+R)>>1,R); 88 return (lc+rc); 89 } 90 } 91 int Abs(int x){ 92 return (x>0?x:-x); 93 } 94 void solve(){ 95 int ans=0; 96 for(int i=0;i<vx.size();i++){ 97 int x=vx[i].L,y=vx[i].R,b=vx[i].b; 98 int cnt1=query(x,y,1,1,n+1); 99 add(x,y,1,1,n+1,b); 100 int cnt2=query(x,y,1,1,n+1); 101 ans+=Abs(cnt1-cnt2); 102 // printf("%d ",Abs(cnt1-cnt2)); 103 } 104 // printf("\n"); 105 for(int i=0;i<vy.size();i++){ 106 int x=vy[i].L,y=vy[i].R,b=vy[i].b; 107 int cnt1=query(x,y,1,1,n+1); 108 add(x,y,1,1,n+1,b); 109 int cnt2=query(x,y,1,1,n+1); 110 ans+=Abs(cnt1-cnt2); 111 // printf("%d ",Abs(cnt1-cnt2)); 112 } 113 printf("%d\n",ans); 114 } 115 int main() 116 { 117 // freopen("data.in","r",stdin); 118 // freopen("my.out","w",stdout); 119 init(); 120 solve(); 121 return 0; 122 }
转载于:https://www.cnblogs.com/w-h-h/p/7814811.html
洛谷P1856 [USACO5.5]矩形周长Picture相关推荐
- [洛谷P1856] [USACO5.5]矩形周长Picture
洛谷题目链接:[USACO5.5]矩形周长Picture 题目背景 墙上贴着许多形状相同的海报.照片.它们的边都是水平和垂直的.每个矩形图片可能部分或全部的覆盖了其他图片.所有矩形合并后的边长称为周长 ...
- 洛谷[P1719 最大加权矩形] {前缀和与差分} 奋斗的珂珂~
洛谷[P1719 最大加权矩形] {前缀和与差分} 题目描述 为了更好的备战NOIP2013,电脑组的几个女孩子LYQ,ZSC,ZHQ认为,我们不光需要机房,我们还需要运动,于是就决定找校长申请一块电 ...
- 洛谷1345 [Usaco5.4]奶牛的电信
题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,...,a(c),且a1与a2相 ...
- 洛谷P1709 [USACO5.5]隐藏口令Hidden Password
P1709 [USACO5.5]隐藏口令Hidden Password 题目描述 有时候程序员有很奇怪的方法来隐藏他们的口令.Binny会选择一个字符串S(由N个小写字母组成,5<=N<= ...
- 洛谷 P2746 [USACO5.3]校园网Network of Schools (Tarjan,SCC缩点,DAG性质)
P2746 [USACO5.3]校园网Network of Schools https://www.luogu.org/problem/P2746 题目描述 一些学校连入一个电脑网络.那些学校已订立了 ...
- 拆分-洛谷P2745 [USACO5.3]窗体面积Window Area
https://www.luogu.org/problem/show?pid=2745 本来因为会WA的,结果AC了,啊哈哈哈哈哈哈哈哈哈 因为题目要求我们要把一个个平面有先后关系,那么我们就搞一个队 ...
- 洛谷 P1719 最大加权矩形
P1719 最大加权矩形 题目描述 为了更好的备战NOIP2013,电脑组的几个女孩子LYQ,ZSC,ZHQ认为,我们不光需要机房,我们还需要运动,于是就决定找校长申请一块电脑组的课余运动场地,听说她 ...
- 洛谷 P1719 最大加权矩形 (前缀和,动态规划)
题目描述 为了更好的备战NOIP2013,电脑组的几个女孩子LYQ,ZSC,ZHQ认为,我们不光需要机房,我们还需要运动,于是就决定找校长申请一块电脑组的课余运动场地,听说她们都是电脑组的高手,校长没 ...
- 洛谷 P1719 最大加权矩形 动态规划
题目描述 为了更好的备战NOIP2013,电脑组的几个女孩子LYQ,ZSC,ZHQ认为,我们不光需要机房,我们还需要运动,于是就决定找校长申请一块电脑组的课余运动场地,听说她们都是电脑组的高手,校长没 ...
最新文章
- C#程序调用cmd执行命令
- Android自定义流式布局-FlowLayout
- 第二届「机器智能前沿论坛」强势来袭,众多机器学习大咖邀你共话AI未来!
- CM: 如何通过table SKWG_BREL快速查询product attachment信息
- 操作系统---进程篇
- java 交互式 shell_Java9 Shell工具(JShell)
- hdu 1728 逃离迷宫(dFS+优先队列)
- 从 BM 到 RBM
- 抓取html的地址怎么写,跪求一个获取URL地址html代码的写法
- 算法工程师的能力素质模型
- obs多推流地址_手把手教你-OBS录屏使用
- Linux系统程序包管理工具-RPM
- 基于Java+SpringBoot+Vue+uniapp微信小程序零食商城系统设计和实现
- 医院在线预约挂号管理系统(Java+SSH+MySQL)
- MyBatis基于XML的使用——缓存
- 自考计算机专业实践报不了名,2014年9月北京自考计算机及应用专业实践课程网报通知...
- c++ 数组作为参数、返回值
- 织梦网站巧用标签实现图片自动Alt功能,强化织梦seo效果
- RGB图像转为灰度图
- c#时分秒毫秒微妙_C# 日期格式精确到毫秒 【转】