19南京网络赛A 扫描线
题目链接:https://nanti.jisuanke.com/t/41298
扫描线的简单题,题目难在找宫殿的价值(°ー°〃),比赛时将近100多行代码找价值,纯模拟,看到题解哭了。
存下每个宫殿的横坐标、价值,存下每个矩形平行于y轴的两条边,左边的那个边要特殊处理,就是横坐标减一。线段树维护y坐标区间和。坐标离散化处理,按x遍历线段,先线段树更新点在y坐标上的值,再处理边,如果线段是矩形终止的边,答案即为更新完点之后查询线段树[y1,y2]上的区间和再减去起始边时查询线段树[y1,y2]上的区间和。
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
#define ll long long
#define ls l,mid,rt<<1
#define rs mid+1,r,rt<<1|1
#define maxn 2000005
ll n,m,p,sum[maxn<<],lazy[maxn<<],ans[maxn];
int ly[maxn];
struct node{
int x,y,val;
bool operator <(const node &w)const{
return x<w.x;
}
}a[maxn];
struct seg{
int x,l,r,s,id;
seg(){}
seg(int x,int l,int r,int s,int id):x(x),l(l),r(r),s(s),id(id){};
bool operator <(const seg &w)const{
if(x==w.x)return s<w.s;
return x<w.x;
}
}se[maxn<<];
int getval(int x,int y)
{
ll num,t;
x=x-n/-;y=y-n/-;
t=max(abs(x),abs(y));
if(x>=y)num=1ll*n*n-*t*t-*t-x-y;
else num=1ll*n*n-*t*t+*t+x+y;
int ret=;
while(num)
{
ret+=num%;
num/=;
}
return ret;
}
void build(int l,int r,int rt)
{
sum[rt]=lazy[rt]=;
if(l==r)return ;
int mid=l+r>>;
build(ls);build(rs);
sum[rt]=sum[rt<<]+sum[rt<<|];
}
void update(int p,int val,int l,int r,int rt)
{
if(l==r)
{
sum[rt]+=val;return ;
}
int mid=l+r>>;
if(p<=mid)update(p,val,ls);
else update(p,val,rs);
sum[rt]=sum[rt<<]+sum[rt<<|];
}
ll query(int L,int R,int l,int r,int rt)
{
if(L<=l&&R>=r)return sum[rt];
int mid=l+r>>;
ll ret=;
if(L<=mid)ret+=query(L,R,ls);
if(R>mid)ret+=query(L,R,rs);
return ret;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lld%lld%lld",&n,&m,&p);
int x,y,x1,y1,val,tot=,cnt=;
for(int i=;i<=m;i++)
{
scanf("%d%d",&x,&y);
val=getval(x,y);
a[++tot].x=x;a[tot].y=y;a[tot].val=val;
ly[tot]=y;
}
for(int i=;i<=p;i++)
{
scanf("%d%d%d%d",&x,&y,&x1,&y1);
se[++cnt]=seg(x-,y,y1,,i);ly[++tot]=y;
se[++cnt]=seg(x1,y,y1,-,i);ly[++tot]=y1;
}
sort(a+,a++m);
sort(ly+,ly++tot);
sort(se+,se++cnt);
int ny=unique(ly+,ly++tot)-ly-,pos=;
build(,ny,);
for(int i=;i<=cnt;i++)
{
se[i].l=lower_bound(ly+,ly++ny,se[i].l)-ly;
se[i].r=lower_bound(ly+,ly++ny,se[i].r)-ly;
}
for(int i=;i<=m;i++)
a[i].y=lower_bound(ly+,ly++ny,a[i].y)-ly;
int j=,num=se[].x;
for(int i=;i<=cnt;i++)
{
while(a[pos].x<=se[i].x&&pos<=m)pos++;
for(;j<pos;j++)update(a[j].y,a[j].val,,ny,);
j=pos;
if(se[i].s==)ans[se[i].id]=query(se[i].l,se[i].r,,ny,);
else ans[se[i].id]=query(se[i].l,se[i].r,,ny,)-ans[se[i].id];
}
for(int i=;i<=p;i++)
printf("%lld\n",ans[i]);
}
return ;
}
19南京网络赛A 扫描线的更多相关文章
- 19南京网络赛B 欧拉降幂
题目链接 给a,b,p.有b个a的幂 #include <iostream> using namespace std; typedef long long LL; const LL N = ...
- HDU 4751 Divide Groups (2013南京网络赛1004题,判断二分图)
Divide Groups Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- HDU 4750 Count The Pairs (2013南京网络赛1003题,并查集)
Count The Pairs Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others ...
- HDU 4758 Walk Through Squares (2013南京网络赛1011题,AC自动机+DP)
Walk Through Squares Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Oth ...
- 2018ICPC南京网络赛
2018ICPC南京网络赛 A. An Olympian Math Problem 题目描述:求\(\sum_{i=1}^{n} i\times i! \%n\) solution \[(n-1) \ ...
- 2019ICPC南京网络赛A题 The beautiful values of the palace(三维偏序)
2019ICPC南京网络赛A题 The beautiful values of the palace https://nanti.jisuanke.com/t/41298 Here is a squa ...
- 2019 南京网络赛A
南京网络赛自闭现场 https://nanti.jisuanke.com/t/41298 二维偏序经典题型 二维前缀和!!! #include<bits/stdc++.h> using n ...
- 计蒜客 2018南京网络赛 I Skr ( 回文树 )
题目链接 题意 : 给出一个由数字组成的字符串.然后要你找出其所有本质不同的回文子串.然后将这些回文子串转化为整数后相加.问你最后的结果是多少.答案模 1e9+7 分析 : 应该可以算是回文树挺裸的题 ...
- 分治维护dp——19南昌网络赛C/cf750E
南昌网络赛,是cf的原题 第一次做到这种题,所以认真想了下,每次给一个询问[L,R],要求出这个区间里有2017子序列,但是不能有2016子序列需要删掉的最少元素个数 首先如果我们之询问一小段区间[L ...
随机推荐
- SpringBoot项目改变图片临时文件的存储路径
springboot项目,部署到服务器后,运行一段时间后,处理文件上传的接口时,后报异常. Could not parse multipart servlet request; nested exce ...
- The call() and apply() Mtheods
Example 6-4function classof(o) { if (o === null) return "Null"; if (o ===undefined ...
- js 设置当前时间的后24小时、后一小时等相对时间
不管是设置相对当前时间有多久时间差的时间,思路:先获取当前时间的时间戳,再根据需求加减时间获得新的时间戳,然后取年月日与时分秒.实例: // 设置默认时间——先转化为毫秒数,加上 24 小时的毫秒数, ...
- JSONPath-简单入门
JSONPath - 是xpath在json的应用. xml最大的优点就有大量的工具可以分析,转换,和选择性的提取文档中的数据.XPath是这些最强大的工具之一. 如果可以使用xpath来解析json ...
- JavaScript中的forEach
语法:array.forEach(callbackfn[, thisArg]) 参数说明: array1 必需. 一个数组对象. callbackfn 必需. 一个接受最多三个参数的函数. 对 ...
- 【33.28%】【BZOJ 1195】[HNOI2006]最短母串
Time Limit: 10 Sec Memory Limit: 32 MB Submit: 1208 Solved: 402 [Submit][Status][Discuss] Descript ...
- 【u033】地震逃生
Time Limit: 1 second Memory Limit: 64 MB [问题描述] 汶川地震发生时,四川**中学正在上课,一看地震发生,老师们立刻带领x名学生逃跑,整个学校可以抽象地看成一 ...
- Linux普通用户执行特定的命令配置
最近处理了一个二级CASE,驻场运维的初级工程师安装软件的时候执行了yum update,导致用户生产系统的glibc也升级了,使得用户的生产调度软件无法使用.研究了两三天,最靠谱的做法如下: Ste ...
- python入门之字符串的魔法
1.test="alex" v=test.capitalize() print(v) //输出结果首字母大写 2.test1="alex&qu ...
- 如何修改eclipse中Dynamic web module的 version
我们直接在eclipse中修改Dynamic Web Module的话会报错,改不了的 所以我们可以找到项目文件中的.setting文件下的org.eclipse.wst.common.project ...