[CF983D]Arkady and Rectangles
题意:按顺序在坐标轴上画$n$个颜色为$1\cdots n$的矩形(数字大的颜色覆盖数字小的颜色),问最后能看到多少种颜色
先离散化,然后考虑扫描线+线段树
线段树每个节点用一个set存覆盖整个区间的颜色,$mx$表示之前未被看到并且能在这个区间看到的最大颜色,$mn$表示能在这个区间看到的最小颜色,那么修改时用儿子的对应信息和当前节点的set最大值更新信息即可
每次扫描线修改完后统计答案,不停地把根节点的$mx$加入答案(已被看到过)并更新线段树对应区间即可
注意坐标区间$[l,r]$转为实现时的区间是$[l,r-1]$!
#include<stdio.h>
#include<set>
#include<map>
#include<vector>
using namespace std;
set<int>cov[800010];
int mx[800010],mn[800010];
bool vis[100010];
void pushup(int x,bool f){
if(f)
mx[x]=mn[x]=0;
else{
mx[x]=max(mx[x<<1],mx[x<<1|1]);
mn[x]=min(mn[x<<1],mn[x<<1|1]);
}
if(!cov[x].empty()){
int g=*cov[x].rbegin();
if(!vis[g])
mx[x]=max(mx[x],g);
else
mn[x]=max(mn[x],g);
}
if(mn[x]>mx[x])mx[x]=0;
}
void modify(int L,int R,int v,int l,int r,int x){
if(L<=l&&r<=R){
if(v>0)
cov[x].insert(v);
else
cov[x].erase(-v);
return pushup(x,l==r);
}
int mid=(l+r)>>1;
if(L<=mid)modify(L,R,v,l,mid,x<<1);
if(mid<R)modify(L,R,v,mid+1,r,x<<1|1);
pushup(x,0);
}
map<int,int>px,py;
map<int,int>::iterator it;
struct rect{
int x1,y1,x2,y2;
}r[100010];
struct event{
int l,r,v;
event(int a=0,int b=0,int c=0){l=a;r=b;v=c;}
};
vector<event>e[200010];
int main(){
int n,nx,ny,i,ans;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d%d%d%d",&r[i].x1,&r[i].y1,&r[i].x2,&r[i].y2);
px[r[i].x1]=px[r[i].x2]=1;
py[r[i].y1]=py[r[i].y2]=1;
}
for(nx=1,it=px.begin();it!=px.end();it++,nx++)it->second=nx;
nx--;
for(ny=1,it=py.begin();it!=py.end();it++,ny++)it->second=ny;
ny--;
for(i=1;i<=n;i++){
r[i].x1=px[r[i].x1];
r[i].x2=px[r[i].x2];
r[i].y1=py[r[i].y1];
r[i].y2=py[r[i].y2]-1;
e[r[i].x1].push_back(event(r[i].y1,r[i].y2,i));
e[r[i].x2].push_back(event(r[i].y1,r[i].y2,-i));
}
ans=0;
for(i=1;i<=nx;i++){
for(event v:e[i])modify(v.l,v.r,v.v,1,ny,1);
while(mx[1]){
vis[mx[1]]=1;
ans++;
modify(r[mx[1]].y1,r[mx[1]].y2,0,1,ny,1);
}
}
printf("%d",ans+1);
}
[CF983D]Arkady and Rectangles的更多相关文章
- [CF983D]Arkady and Rectangles[线段树+可删堆/set]
题意 你有一个无限大的绘图板,开始颜色是\(0\) , 你将进行\(n\) 次绘图,第\(i\) 次绘图会将左下角为 \((x_1, y_1)\),右上角为\((x_2, y_2)\) 的矩形涂成颜色 ...
- Codeforces983D. Arkady and Rectangles
$n \leq 100000$个矩形,一个一个覆盖在坐标系上,每个颜色都不一样,问最后能看到几种颜色. 由于后面的颜色可以覆盖前面的颜色,可以把颜色与时间联系上,第$i$个矩形颜色$i$来把时间维变成 ...
- Codeforces Round #483 (Div. 1) 简要题解
来自FallDream的博客,未经允许,请勿转载,谢谢. 为了证明一下我又来更新了,写一篇简要的题解吧. 这场比赛好像有点神奇,E题莫名是道原题,导致有很多选手直接过掉了(Claris 表演24s过题 ...
- poj-1314 Finding Rectangles
题目地址: http://poj.org/problem?id=1314 题意: 给出一串的点,有些点可以构成正方形,请按照字符排序输出. 因为这道题的用处很大, 最近接触的cv 中的Rectangl ...
- [ACM_暴力][ACM_几何] ZOJ 1426 Counting Rectangles (水平竖直线段组成的矩形个数,暴力)
Description We are given a figure consisting of only horizontal and vertical line segments. Our goal ...
- codeforces 713B B. Searching Rectangles(二分)
题目链接: B. Searching Rectangles time limit per test 1 second memory limit per test 256 megabytes input ...
- White Rectangles[HDU1510]
White Rectangles Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Java基础之在窗口中绘图——绘制直线和矩形(Sketcher 2 drawing lines and rectangles)
控制台程序. import javax.swing.JComponent; import java.util.*; import java.awt.*; import java.awt.geom.*; ...
- Counting Rectangles
Counting Rectangles Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 1043 Accepted: 546 De ...
随机推荐
- 转载:Java中的String与常量池
转载自http://developer.51cto.com/art/201106/266454.htm.感觉总结的不错,自己收藏一下. string是java中的字符串.String类是不可变的,对S ...
- Eclipse Jetty调试时无法保存js文件
Jetty会使用内存映射文件来缓存静态文件,包括js,css文件. 在Windows下,使用内存映射文件会导致文件被锁定,所以当Jetty启动的时候无法在编辑器对js或者css文件进行编辑. 解决办法 ...
- 转:使用 Nginx Upload Module 实现上传文件功能
普通网站在实现文件上传功能的时候,一般是使用Python,Java等后端程序实现,比较麻烦.Nginx有一个Upload模块,可以非常简单的实现文件上传功能.此模块的原理是先把用户上传的文件保存到临时 ...
- 【poj3415-Common Substrings】sam子串计数
题意: 给出两个串,问这两个串的所有的子串中(重复出现的,只要是位置不同就算两个子串),长度大于等于k的公共子串有多少个. 题解: 这题好像大神们都用后缀数组做..然而我在sam的题表上看到这题,做 ...
- NYOJ 20 吝啬的国度 (深搜)
题目链接 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号 ...
- Apache多网站虚拟目录域名
一台服务器安装了Apache,如何绑定多个域名或网站呢? 最简单高效的方法如下: 1. 先打开Apache的配置文件httpd.conf,在这个文件, 找到这句:“#Include etc/extra ...
- Linux下面无线网络配置
原文:http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html 配置 WLAN 特定参数 iwconfig ethX essid ...
- django执行sql
http://docs.30c.org/djangobook2/chapter10/ def first_names(self, last_name): cursor = connection.cur ...
- POJ2680(动态规划,大数)
Computer Transformation Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4548 Accepted ...
- postgresql数据库备份和恢复(超快)
PostgreSQL自带一个客户端pgAdmin,里面有个备份,恢复选项,也能对数据库进行备份 恢复(还原),但最近发现数据库慢慢庞大的时候,经常出错,备份的文件过程中出错的几率那是相当大,手动调节灰 ...