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 ...
随机推荐
- ZeroNet搭建个人网站,一些搞笑图片
ZeroNet是一个利用比特币加密和BT技术提供不受审查的网络与通信的BT平台,ZeroNet网络功能已经得到完整的种子的支持和加密连接,保证用户通信和文件共享的安全.使用ZeroNet,你可以匿名上 ...
- 【codeforces 749A】Bachgold Problem
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- thinter图形开发界面
tkinter编程步骤 导入Tkinter 创建控件 import thinter 创建主窗口 #win = tkinter.Tk() 设置标题 win.title("xiaoxin&quo ...
- Linux 内核 struct device 设备
在最低层, Linux 系统中的每个设备由一个 struct device 代表: struct device { struct device *parent; struct kobject kobj ...
- Linux 内核 回顾: ISA
设计上 ISA 总线非常老了, 并且是非常地低能, 但是它仍然持有一块挺大的控制设备的 市场. 如果速度不重要并且你想支持老式主板, 一个 ISA 实现要优于 PCI. 这个老标准 的另外一个好处是如 ...
- javax.el.PropertyNotFoundException: Property 'XXX' not found on type java.lang.String
遇到的问题: 在使用idea开发Java Web时,调用SSM框架出现了如下错误: 但是我的类中已经定义了geter和seter方法,如下: 而Jsp中的调用代码是通过EL实现,也导入了相应的包.如下 ...
- UVA - 11475 Extend to Palindrome (后缀数组)
Your task is, given an integer N, to make a palidrome (word that reads the same when you reverse it) ...
- css3 移动端旋转动画暂停
音乐播放图片旋转动画 ios不支持暂停: animation-play-state: paused; @-webkit-keyframes rotate{ 100% { transform: rota ...
- ES6类的继承
ES6 引入了关键字class来定义一个类,constructor是构造方法,this代表实例对象. constructor相当于python的init 而this 则相当于self 类之间通过ext ...
- 阿里云基于OSS的云上统一数据保护方案2.0正式发布
近年来,随着越来越多的企业从传统经济向数字经济转型,云已经渐渐成为数据经济IT新常态.核心业务系统上云,云上的业务创新,这些都产生了大量的业务数据,这些数据也成为了企业最重要的资产.资源.阿里云基于O ...