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个位置到 ...
随机推荐
- Win7 disk.sys无法加载的问题
Win7突然无法启动,应该说是启动中卡死,没有别的问题,用安全模式,显示加载disk.sys时卡死.搜索发现很多人遇到这个问题. 实际解决方法是查看数据线,重新插拔,换口,换线. 数据线出现故障往往表 ...
- Thingworx SDK开发自定义Widget
Thingworx自带的图表数量有限,样式也很有限,在echarts上看到了这样一个非常简单的图表,下面将做一个简单的静态引入示范 首先创建Thingworx项目 然后右键ui新建widget 自动生 ...
- Unity 导入的模型检测不到碰撞
解决方案 添加Mesh Collider和rigidbody,并且Collider里边2个勾要勾上. 这是我碰到的问题.如果没解决你的问题,别打我,逃~
- Java使用反射通过对象属性获取属性的值
代码: // 通过属性获取传入对象的指定属性的值 public String getValueByPropName(Student student, String propName) { String ...
- Facebook再次爆出安全漏洞,9000万用户受影响
今年上半年开始,美国社交媒体Facebook因数据泄露事件和涉嫌操纵选举等问题频繁接受听证会拷问,然而事情却远没有结束.今年9月Facebook再次爆出安全漏洞,导致9000万用户可能受到影响. 根据 ...
- 百度图标echarts.js的使用
echarts官网:http://echarts.baidu.com/api.html#echarts echarts是百度公司开的一种开源制作图片工具,是一个专门制作图表的开源工具,功能非常强大,地 ...
- nefu 84 ( 拓展欧几里德模板题 )
链接:传送门 思路:拓展欧几里德模板题,设大圣至少翻转 t 次,大圣起始位置为 x ,大圣目标位置为 y + n * s ( 大圣到达目标位置 y 可能需要多圈,所以用 s 来表示圈数 ),因为只能逆 ...
- [luogu2501 HAOI2006] 数字序列 (递推LIS)
题目描述 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希望改变的幅度太大. 输入输出格式 输入格式: 第一行包含一个数 ...
- IE6浏览器不支持固定定位(position:fixed)解决方案(转)
IE6浏览器不支持固定定位(position:fixed)解决方案 来源:互联网 作者:佚名 时间:12-04 10:54:05 [大 中 小] 点评:有些朋友在进行网页布局时,会遇到IE6浏览器 ...
- 在 RedHat/CentOS 7.x 中使用 nmcli 命令管理网络
在 RedHat/CentOS 7.x 中使用 nmcli 命令管理网络 学习了:https://linux.cn/article-5410-1.html#3_3613 http://www.linu ...