【BZOJ2161】布娃娃 扫描线+线段树
【BZOJ2161】布娃娃
Description
Input
Output
输出一个整数,代表所有布娃娃谜团答案的和除以19921228的余数。
Sample Input
2 3 4 3 1 4 5 2 3 6 9 1 1 2 3 4
Sample Output
题面补充:n<=10^5,注意,是“喜欢它”的布娃娃,不是“它喜欢”的布娃娃!(一开始写了个主席树。。。)
一句话题面:给你堆点和一堆线段,对于每个点,询问在所有覆盖它的线段中,权值第k大的权值是多少。
题解:直接上扫描线+权值线段树即可。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define lson x<<1
#define rson x<<1|1
using namespace std;
typedef long long ll;
const int maxn=100010;
const int mod=19921228;
const int inf=100000000;
int n,tot,ans,nm;
int Padd,Pfirst,Pmod,Pprod,Cadd,Cfirst,Cmod,Cprod,Ladd,Lfirst,Lmod,Lprod,Radd,Rfirst,Rmod,Rprod;
int P[maxn],C[maxn],L[maxn],R[maxn],s[maxn<<2],ref[maxn];
struct Q1
{
int x,y,val;
}q1[maxn<<1];
struct Q2
{
int x,org;
}q2[maxn];
struct node
{
int num,org;
}p[maxn];
bool cmp1(Q1 a,Q1 b)
{
return a.x<b.x;
}
bool cmp2(Q2 a,Q2 b)
{
return a.x<b.x;
}
bool cmp3(node a,node b)
{
return a.num<b.num;
}
void updata(int l,int r,int x,int a,int b)
{
s[x]+=b;
if(l==r) return ;
int mid=l+r>>1;
if(a<=mid) updata(l,mid,lson,a,b);
else updata(mid+1,r,rson,a,b);
}
int query(int l,int r,int x,int b)
{
if(l==r) return ref[l];
int sm=s[rson],mid=l+r>>1;
if(b<=sm) return query(mid+1,r,rson,b);
return query(l,mid,lson,b-sm);
}
int main()
{
scanf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",&n,&Padd,&Pfirst,&Pmod,&Pprod,&Cadd,&Cfirst,&Cmod,&Cprod,&Ladd,&Lfirst,&Lmod,&Lprod,&Radd,&Rfirst,&Rmod,&Rprod);
int i,j;
P[1]=Pfirst%Pmod;
for(i=2;i<=n;i++) P[i]=((ll)P[i-1]*Pprod+Padd+i)%Pmod;
C[1]=Cfirst%Cmod;
for(i=2;i<=n;i++) C[i]=((ll)C[i-1]*Cprod+Cadd+i)%Cmod;
L[1]=Lfirst%Lmod;
for(i=2;i<=n;i++) L[i]=((ll)L[i-1]*Lprod+Ladd+i)%Lmod;
R[1]=Rfirst%Rmod;
for(i=2;i<=n;i++) R[i]=((ll)R[i-1]*Rprod+Radd+i)%Rmod;
for(i=1;i<=n;i++)
{
if(L[i]>R[i]) swap(L[i],R[i]);
q1[i].x=L[i],q1[i+n].x=R[i]+1,q1[i].val=1,q1[i+n].val=-1;
q2[i].x=P[i],q2[i].org=i;
p[i].num=C[i],p[i].org=i;
}
sort(p+1,p+n+1,cmp3);
ref[0]=-1;
for(i=1;i<=n;i++)
{
if(p[i].num>ref[nm]) ref[++nm]=p[i].num;
q1[p[i].org].y=q1[p[i].org+n].y=nm;
}
sort(q1+1,q1+2*n+1,cmp1);
sort(q2+1,q2+n+1,cmp2);
for(i=j=1;i<=n;i++)
{
for(;q1[j].x<=q2[i].x&&j<=2*n;j++) updata(1,nm,1,q1[j].y,q1[j].val);
if(s[1]>=q2[i].org) ans=(ans+query(1,nm,1,q2[i].org))%mod;
}
printf("%d",ans);
return 0;
}
【BZOJ2161】布娃娃 扫描线+线段树的更多相关文章
- HDU 3642 - Get The Treasury - [加强版扫描线+线段树]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3642 Time Limit: 10000/5000 MS (Java/Others) Memory L ...
- 【BZOJ3958】[WF2011]Mummy Madness 二分+扫描线+线段树
[BZOJ3958][WF2011]Mummy Madness Description 在2011年ACM-ICPC World Finals上的一次游览中,你碰到了一个埃及古墓. 不幸的是,你打开了 ...
- HDU 3265/POJ 3832 Posters(扫描线+线段树)(2009 Asia Ningbo Regional)
Description Ted has a new house with a huge window. In this big summer, Ted decides to decorate the ...
- 【bzoj4491】我也不知道题目名字是什么 离线扫描线+线段树
题目描述 给定一个序列A[i],每次询问l,r,求[l,r]内最长子串,使得该子串为不上升子串或不下降子串 输入 第一行n,表示A数组有多少元素接下来一行为n个整数A[i]接下来一个整数Q,表示询问数 ...
- hdu1542 Atlantis(扫描线+线段树+离散)矩形相交面积
题目链接:点击打开链接 题目描写叙述:给定一些矩形,求这些矩形的总面积.假设有重叠.仅仅算一次 解题思路:扫描线+线段树+离散(代码从上往下扫描) 代码: #include<cstdio> ...
- P3722 [AH2017/HNOI2017]影魔(单调栈+扫描线+线段树)
题面传送门 首先我们把这两个贡献翻译成人话: 区间 \([l,r]\) 产生 \(p_1\) 的贡献当且仅当 \(a_l,a_r\) 分别为区间 \([l,r]\) 的最大值和次大值. 区间 \([l ...
- BZOJ 2584: [Wc2012]memory(扫描线+线段树)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2584 题意:给出平面n个线段,任意两个线段严格不相交,且每个线段不平行于坐标轴.移 ...
- [BZOJ 1218] [HNOI2003] 激光炸弹 【n logn 做法 - 扫描线 + 线段树】
题目链接:BZOJ - 1218 题目分析 可以覆盖一个边长为 R 的正方形,但是不能包括边界,所以等价于一个边长为 R - 1 的正方形. 坐标范围 <= 5000 ,直接 n^2 的二维前缀 ...
- hdu4419 Colourful Rectangle 12年杭州网络赛 扫描线+线段树
题意:给定n个矩形,每个矩形有一种颜色,RGB中的一种.相交的部分可能为RG,RB,GB,RGB,问这n个矩形覆盖的面积中,7种颜色的面积分别为多少 思路:把x轴离散化做扫描线,线段树维护一个扫描区间 ...
随机推荐
- hdu 3501 容斥原理或欧拉函数
Calculation 2 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- 更改 terminal 開啟時,預設的路徑
echo "cd /media" >> ~/.bashrc open a new terminal (ctrl + alt + t)
- AC日记——王室联邦 bzoj 1086
Description “余”人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理.他的国家有n个城市,编号为1..n.一些城市之间有道路相连,任意两个不 ...
- AC日记——[HAOI2015]树上操作 洛谷 P3178
题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a .操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 ...
- Django中使用表单
使用表单 表单用 user 提交数据,是网站中比较重要的一个内容 GET 和 POST 方法 GET 和 POST 的区别 URL,全称是"统一资源定位符".用于对应互联网上的每一 ...
- (3)一般处理程序 ,HttpContext类
一般处理程序的后缀名 .ashx ,专门用来处理web请求 新建后默认代码: public class Handler1 : IHttpHandler { public void ProcessRe ...
- UVA - 10615 Rooks
建一下模,把行和列看成二分图的点,把车看成是二分图中的边,这样就变成了上一个博客的问题. 我们每次新加一条边,就把它加入一条 这条边两端点最小没有出现的颜色 交替出现的路径中去. #include& ...
- layui-时间选择器-时间范围选择
HTML: JS: layui.use(['laydate'],function{ }); start:就为你选择的开始日期; end:就为你选择的结束日期 此方式可选择任意范围的时间,时间格式可任意 ...
- 利用注解和反射,将Bean枚举字段的值填入相应的字段中,并转化为fastjson返回前台
需求:需要将枚举类型的字段例如enable(是否启用)转化为enable:1,enableName:是.这种形式返回给前台. 思路:在bean字段上加上枚举类型的注解,通过字段的值和枚举类反射获取枚举 ...
- Java中泛型的Class<Object>与Class<?>的区别(转)
Object是一个具体的类名,而?是一个占位符号,表示任何类型,只要是SomeClass类或者子类就可以. List<Object>可以放任何类对象. List<? extends ...