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
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
char ch; bool ok;
void read(int &x){
for (ok=,ch=getchar();!isdigit(ch);ch=getchar()) if (ch=='-') ok=;
for (x=;isdigit(ch);x=x*+ch-'',ch=getchar());
if (ok) x=-x;
}
const int maxn=;
const int inf=0x3f3f3f3f;
const int MOD=;
int add,first,mod,prod,tmp[][maxn];
int n,idx,ans;
struct Data{
int x,id,op;
}list[maxn*];
bool operator<(const Data &a,const Data &b){
if (a.x!=b.x) return a.x<b.x;
return a.op<b.op;
}
struct Splay{
#define ls son[x][0]
#define rs son[x][1]
int root,fa[maxn],son[maxn][],siz[maxn],val[maxn];
void init(){
root=n+,siz[n+]=,val[n+]=inf,son[n+][]=n+;
siz[n+]=,val[n+]=-inf,fa[n+]=n+;
}
int which(int x){return son[fa[x]][]==x;}
void updata(int x){siz[x]=siz[ls]++siz[rs];}
void rotate(int x){
int y=fa[x],z=fa[y],d=which(x),dd=which(y);
fa[son[x][d^]]=y,son[y][d]=son[x][d^],fa[x]=z;
if (z) son[z][dd]=x;
son[x][d^]=y,fa[y]=x,updata(y);
}
void splay(int x){
while (fa[x]){
if (!fa[fa[x]]) rotate(x);
else if (which(fa[x])==which(x)) rotate(fa[x]),rotate(x);
else rotate(x),rotate(x);
}
updata(x),root=x;
}
void insert(int x,int v){
fa[x]=son[x][]=son[x][]=,siz[x]=,val[x]=v;
int f,t;
for (f=t=root;t;f=t,t=son[t][v<val[t]]);
fa[x]=f,son[f][v<val[f]]=x,splay(x);
}
int find_left(int x){for (;son[x][];x=son[x][]);return x;}
void _delete(int x){
splay(x);
int y=find_left(son[x][]);
fa[ls]=fa[rs]=,splay(y),fa[ls]=y,son[y][]=ls,updata(y);
}
int find_kth(int x,int k){
if (!x) return ;
if (siz[ls]>=k) return find_kth(ls,k);
if (siz[ls]+==k) return x;
return find_kth(rs,k-siz[ls]-);
}
int query(int k){
int x=find_kth(root,k+);
if (<=x&&x<=n) return val[x];
return ;
}
}T;
int main(){
read(n);
for (int op=;op<;op++){
read(add),read(first),read(mod),read(prod);
tmp[op][]=first%mod;
for (int i=;i<=n;i++) tmp[op][i]=(1LL*tmp[op][i-]*prod+add+i)%mod;
}
for (int i=;i<=n;i++) if (tmp[][i]>tmp[][i]) swap(tmp[][i],tmp[][i]);
for (int i=;i<=n;i++) list[++idx]=(Data){tmp[][i],i,};
for (int i=;i<=n;i++) list[++idx]=(Data){tmp[][i],i,};
for (int i=;i<=n;i++) list[++idx]=(Data){tmp[][i],i,};
sort(list+,list+idx+),T.init();
for (int i=;i<=idx;i++){
int id=list[i].id,op=list[i].op;
if (op==) T.insert(id,tmp[][id]);
else if (op==) ans+=T.query(id),ans%=MOD;
else if (op==) T._delete(id);
}
printf("%d\n",ans);
return ;
}
bzoj2161: 布娃娃的更多相关文章
- BZOJ2161: 布娃娃 整体二分
Code: #include <cstdio> #include <algorithm> #include <cstring> #include <vecto ...
- 【主席树】【bzoj2161】[hdu4348]
#include<cstdio> #include<algorithm> #include<cstring> #define N 400000 using name ...
- 【BZOJ2161】布娃娃 扫描线+线段树
[BZOJ2161]布娃娃 Description 小时候的雨荨非常听话,是父母眼中的好孩子.在学校是老师的左右手,同学的好榜样.后来她成为艾利斯顿第二代考神,这和小时候培养的良好素质是分不开的.雨荨 ...
- 【bzoj2161】布娃娃 权值线段树
题目描述 小时候的雨荨非常听话,是父母眼中的好孩子.在学校是老师的左右手,同学的好榜样.后来她成为艾利斯顿第二代考神,这和小时候培养的良好素质是分不开的.雨荨的妈妈也为有这么一个懂事的女儿感到高兴.一 ...
- Unity Ragdoll(布娃娃系统)
逼真的动作如何实现的? 在一些游戏中当NPC或玩家死亡的时候,死亡的肢体动作十分逼真,这一物理现象如何用Unity来实现呢?Unity物理引擎中的Ragdoll系统,可以用来创建这种效果,具体请参阅以 ...
- BZOJ_2161_布娃娃_权值线段树
BZOJ_2161_布娃娃_权值线段树 Description 小时候的雨荨非常听话,是父母眼中的好孩子.在学校是老师的左右手,同学的好榜样.后来她成为艾利斯顿第二 代考神,这和小时候培养的良好素质是 ...
- unity3d中布娃娃系统
原地址:http://blog.csdn.net/pizi0475/article/details/9771941 转自: http://forum.mirax.com.tw/unity/viewto ...
- 两分钟学会Unity3D布娃娃的使用
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/wangbin_jxust/article/details/28587233 在RPG游戏中,为了让人 ...
- BZOJ 2161 布娃娃 (主席树)
题面 想了一个主席树做法 我们把每个区间的两个端点拆开 对$L,R$分别从小到大排序,分别从左到右依次把对应标号的$c_{i}$插入到权值主席树里 每次查询$p_{i}$,在排序后的$L,R$数组上分 ...
随机推荐
- 通过圆形按钮的绘制熟悉Qt的绘图机制,掌握这种终极方法
基本上用QPainter就可以实现 1. QPainter painter(this); //开始的标志(可以不用) painter.begin(this); //保存最初的设置 painter.sa ...
- Qt用委托绘制需要的图形的步骤
1.拷贝一份option: QStyleOptionViewItemV4 opt = option; 2.获取到widget,也是通过QStyleOptionViewItem &option ...
- Java与C++进行系统间交互:Protocol Buffer
在一次项目中,因笔者负责的java端应用需要与公司C++系统进行交互,公司选定Protocol Buffer方案,故简单的了解一下 有需要的可以看一下其他作者的文章,了解一下Protobuf: htt ...
- unity3d easytouch计算摇杆旋转角度以及摇杆八方向控制角色
在写第三人称控制的时候,一开始在电脑测试是用WASD控制角色 后来需要发布到手机上,于是就加了一个摇杆 键盘控制角色的代码已经写好了,角色八方向移动 如果按照传统的大众思路来控制的话,是达不到我想要的 ...
- 发布npm包 登录报错 E409 Conflict
1.到官网注册个账号,并且验证完邮箱:https://www.npmjs.com/ 2.打开cmd命令行 登录:$npm login 根据提示 一步步完成登录. 3.新建一个项目文件夹: npmtes ...
- Android 上能提高学习工作效率的应用
在知乎上有朋友问 Android 上能提高学习.工作效率的应用有哪些?我给他们的推荐获得了最多赞同.以后会不断完善更新此贴. Any.do :规划日程,各平台都有. Evernote:记笔记,各平台都 ...
- Sublime text3最全快捷键清单
[转]https://blog.csdn.net/mrchengzp/article/details/78508509,感谢作者的分享,收录方便查阅 Sublime Text 支持多种编程语言的语 ...
- FlaskWeb开发从入门到放弃(二)
第5章 章节五 01 内容概要 02 内容回顾 03 面向对象相关补充:metaclass(一) 04 面向对象相关补充:metaclass(二) 05 WTforms实例化流程分析(一) 06 WT ...
- Fluentd插件使用方法
这里主要介绍从MongoDB同步数据到ODPS.ruby环境的搭建以及fluent_plugin_mongo_odps插件的安装.1.准备工作1.1安装环境要求Ruby 2.1以上Gem 2.4.5以 ...
- KVM web管理工具——WebVirtMgr(一)
WebVirtMgr 介绍 WebVirtMgr采用几乎纯Python开发,其前端是基于Python的Django,后端是基于Libvirt的Python接口,将日常kvm的管理操作变的更加的 ...