【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轴离散化做扫描线,线段树维护一个扫描区间 ...
随机推荐
- 洛谷P1101 单词方阵
题目描述 给一nXn的字母方阵,内可能蕴含多个“yizhong”单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间[color=red ...
- 标准C程序设计七---121
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- 标准C程序设计七---50
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- invoke反射
mark一下使用用法,原理以后在搞: 无参数: import java.text.SimpleDateFormat; import java.util.Date; import java.lang.r ...
- hdu 5461(分类讨论)
Largest Point Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tot ...
- AC日记——[USACO07DEC]手链Charm Bracelet 洛谷 P2871
题目描述 Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like t ...
- Hibernate游记——盘缠篇(jar包)
需要的jar包我都放我百度网盘了 jar(包含注解需要的jar)包传送门:http://pan.baidu.com/s/1o60OYvg
- 洛谷——P1588 丢失的牛
P1588 丢失的牛 题目描述 FJ丢失了他的一头牛,他决定追回他的牛.已知FJ和牛在一条直线上,初始位置分别为x和y,假定牛在原地不动.FJ的行走方式很特别:他每一次可以前进一步.后退一步或者直接走 ...
- SpringBoot 整合 RabbitMQ(包含三种消息确认机制以及消费端限流)
目录 说明 生产端 消费端 说明 本文 SpringBoot 与 RabbitMQ 进行整合的时候,包含了三种消息的确认模式,如果查询详细的确认模式设置,请阅读:RabbitMQ的三种消息确认模式 同 ...
- 321. Create Maximum Number
/* * 321. Create Maximum Number * 2016-7-6 by Mingyang */ public int[] maxNumber(int[] nums1, int[] ...