BZOJ2161: 布娃娃 整体二分
Code:
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#define maxn 500005
#define setIO(s) freopen(s".in","r",stdin)
#define mod 19921228
#define ll long long
using namespace std;
vector <int> G[maxn];
struct Node{
int l,r,c,p;
}node[maxn],arr[maxn];
int n;
namespace DATA_Maker{
int C[maxn],L[maxn],R[maxn],P[maxn];
void make(int *a){
int pa,pf,pm,pp;
scanf("%d%d%d%d",&pa,&pf,&pm,&pp);
a[1] = pf % pm;
for(int i = 2;i <= n; ++i) a[i]=((long long)a[i-1]*pp+pa+i)%pm;
}
int main(){
scanf("%d",&n);
make(P); for(int i=1;i<=n;++i) node[i].p=P[i];
make(C); for(int i=1;i<=n;++i) node[i].c=C[i];
make(L); for(int i=1;i<=n;++i) node[i].l=L[i];
make(R); for(int i=1;i<=n;++i) node[i].r=R[i];
}
};
namespace Solve{
int hh[maxn],que[maxn],cc[maxn],cur[maxn],answer[maxn],tl[maxn],tr[maxn];
struct Array{
int A[maxn];
int lowbit(int t){ return t&(-t); }
void update(int pos,int delta){ while(pos<maxn) A[pos]+=delta,pos+=lowbit(pos); }
void add(int l,int r,int k){ update(l,k),update(r+1,-k); }
int query(int x){ if(!x) return 0; int sum=0; while(x>0) sum+=A[x],x-=lowbit(x); return sum; }
}T;
void solve(int x,int y,int l,int r){
if(l>r||x>y) return;
if(l==r){
for(int i=x;i<=y;++i) answer[que[i]]=cc[l];
return;
}
int mid=(l+r)>>1,p=0,q=0,kk=x-1;
for(int i=mid+1;i<=r;++i)
for(int j=0;j<G[i].size();++j) T.add(node[G[i][j]].l,node[G[i][j]].r,1);
for(int i=x;i<=y;++i) {
int delta=cur[que[i]]+T.query(node[que[i]].p);
if(delta>=que[i]) tr[++q]=que[i];
else tl[++p]=que[i],cur[que[i]]=delta;
}
for(int i=mid+1;i<=r;++i)
for(int j=0;j<G[i].size();++j) T.add(node[G[i][j]].l,node[G[i][j]].r,-1);
for(int i=1;i<=p;++i) que[++kk]=tl[i];
for(int i=1;i<=q;++i) que[++kk]=tr[i];
solve(x,x+p-1,l,mid),solve(y-q+1,y,mid+1,r);
}
int main()
{
//=======================================离散化
int cnt=0,mx=0;
for(int i=1;i<=n;++i)
{
hh[++cnt]=node[i].l;
hh[++cnt]=node[i].r;
hh[++cnt]=node[i].p;
}
sort(hh+1,hh+1+cnt);
for(int i=1;i<=n;++i)
{
node[i].p=lower_bound(hh+1,hh+1+cnt,node[i].p)-hh;
node[i].l=lower_bound(hh+1,hh+1+cnt,node[i].l)-hh;
node[i].r=lower_bound(hh+1,hh+1+cnt,node[i].r)-hh;
if(node[i].l>node[i].r)swap(node[i].l,node[i].r);
}
for(int i=1;i<=n;++i) cc[i]=node[i].c;
sort(cc+1,cc+1+n);
for(int i=1;i<=n;++i) node[i].c=lower_bound(cc+1,cc+1+n,node[i].c)-cc;
//========================================离散完毕
for(int i=1;i<=n;++i) G[node[i].c].push_back(i),mx=max(mx,node[i].c);
for(int i=1;i<=n;++i) que[i]=i;
solve(1,n,0,mx);
long long tmp=0;
for(int i=1;i<=n;++i) tmp+=answer[i],tmp%=mod;
printf("%lld",tmp);
}
};
int main(){
//setIO("input");
DATA_Maker::main();
Solve::main();
return 0;
}
BZOJ2161: 布娃娃 整体二分的更多相关文章
- 整体二分QAQ
POJ 2104 K-th Number 时空隧道 题意: 给出一个序列,每次查询区间第k小 分析: 整体二分入门题? 代码: #include<algorithm> #include&l ...
- BZOJ 3110 [Zjoi2013]K大数查询 ——整体二分
[题目分析] 整体二分显而易见. 自己YY了一下用树状数组区间修改,区间查询的操作. 又因为一个字母调了一下午. 貌似树状数组并不需要清空,可以用一个指针来维护,可以少一个log 懒得写了. [代码] ...
- [bzoj1901][zoj2112][Dynamic Rankings] (整体二分+树状数组 or 动态开点线段树 or 主席树)
Dynamic Rankings Time Limit: 10 Seconds Memory Limit: 32768 KB The Company Dynamic Rankings has ...
- bzoj 2527: [Poi2011]Meteors 整体二分
给每个国家建一个链表,这样分治过程中的复杂度就和序列长度线形相关了,无脑套整体二分就可以. (最坑的地方是如果所有位置都是一个国家,那么它的样本个数会爆longlong!!被这个坑了一次,大于p[i] ...
- 【BZOJ-2527】Meteors 整体二分 + 树状数组
2527: [Poi2011]Meteors Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 831 Solved: 306[Submit][Stat ...
- BZOJ 1901 Zju2112 Dynamic Rankings ——整体二分
[题目分析] 上次用树状数组套主席树做的,这次用整体二分去水. 把所有的查询的结果一起进行二分,思路很好. [代码] #include <cstdio> #include <cstr ...
- BZOJ 1901 & 整体二分
题意: 带修改的区间第K小. SOL: 看了很久很久很久很久的整体二分,网上的各种题解也不是很多,也一直很不了解所谓的"贡献","将询问一起递归"是什么意思.. ...
- bzoj1146整体二分+树链剖分+树状数组
其实也没啥好说的 用树状数组可以O(logn)的查询 套一层整体二分就可以做到O(nlngn) 最后用树链剖分让序列上树 #include<cstdio> #include<cstr ...
- 【BZOJ 3110】 [Zjoi2013]K大数查询(整体二分)
[题目] Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到 ...
随机推荐
- performSelector与objc_msgSend
- perform:(SEL)aSelector { if (aSelector) return objc_msgSend(self, aSelector); else return [self er ...
- Code Snippet 插件 使用——代码高亮
Code Snippet 下载地址 下载后安装,重启windows live writer 插入-->CodeSnippet 将代码粘贴进去,如图: 代码效果: @Controllerpubli ...
- HDU 2303 The Embarrassed Cryptographer
The Embarrassed Cryptographer 题意 给一个两个素数乘积(1e100)K, 给以个数L(1e6), 判断K的两个素数是不是都大于L 题解 对于这么大的范围,素数肯定是要打表 ...
- UVALive-7198 Tall orders 微积分 二分
题目链接:https://cn.vjudge.net/problem/UVALive-7198 题意 有悬链线方程$ f(x)=a \cdot cosh(\frac{s}{a}) $, 现有两个电线杆 ...
- [读书笔记] R语言实战 (十四) 主成分和因子分析
主成分分析和探索性因子分析是用来探索和简化多变量复杂关系的常用方法,能解决信息过度复杂的多变量数据问题. 主成分分析PCA:一种数据降维技巧,将大量相关变量转化为一组很少的不相关变量,这些无关变量称为 ...
- ajax的两种使用方式
一.Ajax概述 1.什么是同步,什么是异步 同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待 卡死状态 异步现象:客户端发送请求到服务器端,无论服务器是否返回响应,客户端都 ...
- java整型byte,short,int,long取值范围大小
byte 1个字节 short 2个字节 int 4个字节long 8 个字节 varchar 可变长度的非Unicode数据,最长为8000个字符nvarchar 可变长度Unicode数据,最长 ...
- 洛谷 P2949 [USACO09OPEN]工作调度Work Scheduling
P2949 [USACO09OPEN]工作调度Work Scheduling 题目描述 Farmer John has so very many jobs to do! In order to run ...
- jquery访问ashx文件示例
转自原文jquery访问ashx文件示例 .ashx 文件用于写web handler的..ashx文件与.aspx文件类似,可以通过它来调用HttpHandler类,它免去了普通.aspx页面的控件 ...
- Http抓包工具--查尔斯
查尔斯 查尔斯:http://www.charlesproxy.com/ 这是比較好用的抓包工具.有Mac.Windows.Linux版本号.能够相应用程序.浏览器.手机.手机模拟器进行抓包. 官方站 ...