(2016北京集训十二)【xsy1542】疯狂求导
题解:
这题看起来很难。。。但是实际上并没有想象中的那么难
第一眼看上去不会求导公式怎么办?不要紧,题目背景非常良心的给出了题目中的导数计算公式
求完导合并同类项很恶心怎么办?不要紧,样例解释说明了不需要合并同类项(然后有许多人因为这个爆〇了)
一看这种题目形式明显就是大数据结构,外面的序列明显线段树维护,次数也可以用线段树,但是线段树套线段树容易MLE;
所以用树状数组套线段树实现
具体就是以1~n为下标建线段树,外面用树状数组维护次数,每次在树状数组上查询即可
写完过样例直接1A就是爽
代码:
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define inf 2147483647
#define eps 1e-9
#define lb(x) (x&-x)
using namespace std;
typedef long long ll;
const int N=,bit=;
struct node{
int num,ls,rs;
ll v;
}t[];
int n,m,ans=,op,l,r,tot=,rts[];
int TheseNumbersDoNotMakeAnySense;
ll s;
void newn(int &u){
if(!u)u=++tot;
}
void pd(int u,int l,int r){
if(t[u].num){
int mid=(l+r)/;
newn(t[u].ls);
newn(t[u].rs);
t[t[u].ls].num+=t[u].num;
t[t[u].ls].v+=t[u].num*(mid-l+);
t[t[u].rs].num+=t[u].num;
t[t[u].rs].v+=t[u].num*(r-mid);
t[u].num=;
}
}
void updata(int l,int r,int &u,int L,int R,int v){
newn(u);
if(L<=l&&r<=R){
t[u].num+=v;
t[u].v+=v*(r-l+);
return;
}
int mid=(l+r)/;
pd(u,l,r);
if(L<=mid)updata(l,mid,t[u].ls,L,R,v);
if(mid<R)updata(mid+,r,t[u].rs,L,R,v);
t[u].v=t[t[u].ls].v+t[t[u].rs].v;
}
int query(int l,int r,int u,int L,int R){
if(!u)return ;
if(L<=l&&r<=R){
return t[u].v;
}
int mid=(l+r)/,ret=;
pd(u,l,r);
if(L<=mid)ret=query(l,mid,t[u].ls,L,R);
if(mid<R)ret+=query(mid+,r,t[u].rs,L,R);
return ret;
}
void ins(int l,int r,int s){
for(;s<=N;s+=lb(s)){
updata(,n,rts[s],l,r,);
}
}
ll ask(int l,int r,int s){
ll ret=;
for(;s;s-=lb(s)){
ret+=query(,n,rts[s],l,r);
}
return ret;
}
void work(int l,int r,ll s){
ll ret=ask(l,r,N),tmp=;
if(ret<=s){
printf("1 %lld\n",ret);
ans=;
return;
}
s=ret-s;
for(int bt=bit;bt;bt/=){
if(tmp+bt<=N){
int q=query(,n,rts[tmp+bt],l,r);
//printf("%lld %lld %lld\n",tmp,bt,q);
if(s>q)s-=q,tmp+=bt;
}
}
ll rt=ask(l,r,tmp+);
rt=ret-rt;
printf("%lld %lld\n",tmp+,rt);
ans=tmp+;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d",&TheseNumbersDoNotMakeAnySense);
}
for(int i=;i<=m;i++){
scanf("%d%d%d%lld",&op,&l,&r,&s);
if(op==){
s^=ans;
ins(l,r,s);
}else{
work(l,r,s);
}
}
return ;
}
(2016北京集训十二)【xsy1542】疯狂求导的更多相关文章
- (2016北京集训十)【xsy1528】azelso - 概率期望dp
北京集训的题都是好题啊~~(于是我爆0了) 注意到一个重要的性质就是期望是线性的,也就是说每一段的期望步数可以直接加起来,那么dp求出每一段的期望就行了... 设$f_i$表示从$i$出发不回到$i$ ...
- (2016北京集训十)【xsy1530】小Q与内存
一道很有意思的神题~ 暴力平衡树的复杂度很对(并不),但是$2^{30}$的空间一脸屎 这题的正解是一个类似线段树的数据结构,我觉得很有创新性Orz 首先可以想到一种暴力就是用一个点代表一个区间,然后 ...
- (2016北京集训十)【xsy1529】小Q与进位制 - 分治FFT
题意很简单,就是求这个数... 其实场上我想出了分治fft的正解...然而不会打...然后打了个暴力fft挂了... 没啥好讲的,这题很恶心,卡常卡精度还爆int,要各种优化,有些dalao写的很复杂 ...
- 【2018北京集训十二】 coin 矩阵快速幂
矩阵快速幂原来还可以这么用?? 你们城里人还真会玩. 我们令$f[i][j][k]$表示总的钱数为i,当前使用的最大面值硬币的面值为$v_j$,最小为$v_k$的方案数量. 不难发现$f[i][j][ ...
- (2016北京集训十四)【xsy1557】task
题解: 限制可以看成图状结构,每个任务的对物品数量的影响可以看成权值,只不过这个权值用一个五元组来表示. 那么题意要求的就是最大权闭合子图,网络流经典应用. 代码: #include<algor ...
- (2016北京集训十四)【xsy1556】股神小D - LCT
题解: 题解居然是LCT……受教了 把所有区间按照端点排序,动态维护目前有重叠的区间,用LCT维护即可. 代码: #include<algorithm> #include<iostr ...
- 【2016北京集训测试赛(二)】 thr (树形DP)
Description 题解 (这可是一道很早就碰到的练习题然后我不会做不想做,没想到在Contest碰到欲哭无泪......) 题目大意是寻找三点对的个数,使得其中的三个点两两距离都为d. 问题在于 ...
- 【2016北京集训测试赛(十六)】 River (最大流)
Description Special Judge Hint 注意是全程不能经过两个相同的景点,并且一天的开始和结束不能用同样的交通方式. 题解 题目大意:给定两组点,每组有$n$个点,有若干条跨组 ...
- BZOJ 4543 2016北京集训测试赛(二)Problem B: thr 既 长链剖分学习笔记
Solution 这题的解法很妙啊... 考虑这三个点可能的形态: 令它们的重心为距离到这三个点都相同的节点, 则其中两个点分别在重心的两棵子树中, 且到重心的距离相等; 第三个点可能在重心的一棵不同 ...
随机推荐
- 互联网时代: 从Uber的供需匹配看开发需求
每次看电影中的有钱人都有专属司机接送,只要坐在车里,就有人帮忙开车门.提行李及关车门.感觉是非现实的遥远画面,现在却有机会可以在日常生活中成真! 2009年Travis Kalanick及Garret ...
- face++算法工程实习生面试
2018-01-11 算法工程实习生 自动化工具链方面 面试的知识点非常仔细,十分检验基本功底 1.自我介绍 2.算法题,leetcode 第一题 两数之和 问python中数组和字典的查找时间复杂 ...
- 移动端和pc端的判断,不同端做不同的处理
1.通过js判段是pc端还是移动端 function browserRedirect() { var type = ""; var sUserAgent = navigator.u ...
- async-validator 的中文文档翻译
阿里出品的 antd 和 ElementUI 组件库中表单校验默认使用的 async-validator,它在 gitbub 上也获得了 3.8k 的 star,可见这个库十分强大,奈何只有英文文档看 ...
- python--(常用模块-1)
python--(常用模块-1) 一.模块的简单认识: 什么是模块,模块就是我们把装有特有功能的代码进行归类的结果,从代码编写的单位来看我们的程序,从小到大的顺序:一条代码<语句块<代码块 ...
- LaTeX 基本的公式符号命令
本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50240237 下面列出一些基本的LaT ...
- Winserver服务器-AD字段对照简图
AD字段对照简图
- C++基础学习教程(三)
承接上一讲. 2.7文件I/O 关于读写文件,C++中有一个专门的头文件<fstream>. 首先是读文件演示样例,例如以下: </pre><pre> /***** ...
- MongoDB 数据库下载和安装
MongoDB是一款非常流行的非关系型数据库,将面向对象数据存储做的非常好.这里就不具体介绍它的使用,本文主要解说怎样安装MongoDB数据库.把自己安装过程中碰到的问题和最后解决方法分享给大家,希望 ...
- redis的javaclientJedis简单封装
经过我们团队的一番讨论,终于决定使用redis来进行我们的业务缓存.redis会将数据缓存到内存中,执行效率会非常快.同一时候异步将数据写入到磁盘中.进行持久化. 且redis支持主从同步,支持分布式 ...