题解:

这题看起来很难。。。但是实际上并没有想象中的那么难

第一眼看上去不会求导公式怎么办?不要紧,题目背景非常良心的给出了题目中的导数计算公式

求完导合并同类项很恶心怎么办?不要紧,样例解释说明了不需要合并同类项(然后有许多人因为这个爆〇了)

一看这种题目形式明显就是大数据结构,外面的序列明显线段树维护,次数也可以用线段树,但是线段树套线段树容易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】疯狂求导的更多相关文章

  1. (2016北京集训十)【xsy1528】azelso - 概率期望dp

    北京集训的题都是好题啊~~(于是我爆0了) 注意到一个重要的性质就是期望是线性的,也就是说每一段的期望步数可以直接加起来,那么dp求出每一段的期望就行了... 设$f_i$表示从$i$出发不回到$i$ ...

  2. (2016北京集训十)【xsy1530】小Q与内存

    一道很有意思的神题~ 暴力平衡树的复杂度很对(并不),但是$2^{30}$的空间一脸屎 这题的正解是一个类似线段树的数据结构,我觉得很有创新性Orz 首先可以想到一种暴力就是用一个点代表一个区间,然后 ...

  3. (2016北京集训十)【xsy1529】小Q与进位制 - 分治FFT

    题意很简单,就是求这个数... 其实场上我想出了分治fft的正解...然而不会打...然后打了个暴力fft挂了... 没啥好讲的,这题很恶心,卡常卡精度还爆int,要各种优化,有些dalao写的很复杂 ...

  4. 【2018北京集训十二】 coin 矩阵快速幂

    矩阵快速幂原来还可以这么用?? 你们城里人还真会玩. 我们令$f[i][j][k]$表示总的钱数为i,当前使用的最大面值硬币的面值为$v_j$,最小为$v_k$的方案数量. 不难发现$f[i][j][ ...

  5. (2016北京集训十四)【xsy1557】task

    题解: 限制可以看成图状结构,每个任务的对物品数量的影响可以看成权值,只不过这个权值用一个五元组来表示. 那么题意要求的就是最大权闭合子图,网络流经典应用. 代码: #include<algor ...

  6. (2016北京集训十四)【xsy1556】股神小D - LCT

    题解: 题解居然是LCT……受教了 把所有区间按照端点排序,动态维护目前有重叠的区间,用LCT维护即可. 代码: #include<algorithm> #include<iostr ...

  7. 【2016北京集训测试赛(二)】 thr (树形DP)

    Description 题解 (这可是一道很早就碰到的练习题然后我不会做不想做,没想到在Contest碰到欲哭无泪......) 题目大意是寻找三点对的个数,使得其中的三个点两两距离都为d. 问题在于 ...

  8. 【2016北京集训测试赛(十六)】 River (最大流)

    Description  Special Judge Hint 注意是全程不能经过两个相同的景点,并且一天的开始和结束不能用同样的交通方式. 题解 题目大意:给定两组点,每组有$n$个点,有若干条跨组 ...

  9. BZOJ 4543 2016北京集训测试赛(二)Problem B: thr 既 长链剖分学习笔记

    Solution 这题的解法很妙啊... 考虑这三个点可能的形态: 令它们的重心为距离到这三个点都相同的节点, 则其中两个点分别在重心的两棵子树中, 且到重心的距离相等; 第三个点可能在重心的一棵不同 ...

随机推荐

  1. oracle错误ORA-00604 递归sql级别1出现错误 ora-00942 表或试图不存在 ORA-06512 在line 11

    错误截图如下: 搜索了很多方法,但是都没有办法解决,不过最终还是找到了一个好的解决办法, 多谢那位仁兄的博客[http://blog.itpub.net/519536/viewspace-689469 ...

  2. HDU 1513 Palindrome【LCS】

    题意:给出一个字符串s,问至少加入多少个字母让它变成回文串 解题思路:求出该字符串与该字符串翻转后的最长公共子序列的长度,再用该字符串的长度减去最长公共子序列的长度即为所求 反思:因为题目所给的n的范 ...

  3. 广义线性模型------逻辑回归和softmax回归

    1.广义线性模型 2.逻辑回归 3.softmax回归

  4. [读书笔记] R语言实战 (十三) 广义线性模型

    广义线性模型扩展了线性模型的框架,它包含了非正态的因变量分析 广义线性模型拟合形式: $$g(\mu_\lambda) = \beta_0 + \sum_{j=1}^m\beta_jX_j$$ $g( ...

  5. Java获取当天、本周、本月、本季度、本年等 开始及结束时间

    package com.zhaochao.utils; import java.text.SimpleDateFormat; import java.util.Calendar; import jav ...

  6. 标题:u-boot 移植步骤详解

    1 U-Boot简介U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目.从FADSROM.8xxROM.PPCBOOT逐步发展演化而来.其源码目录.编译形式与 ...

  7. vuex中mutations与actions的区别

    要执行vuex中的函数,有两种方法: 1.commit,例如this.$store.commit("GETMODULESELECTLIST"); //mutations中的方法 2 ...

  8. 使用iframe标签时如何通过jquery隐藏滚动条

    通过mouseover和mouseout事件来控制iframe的滚动条 代码如下:

  9. Linux学习总结(16)——CentOS 下 Nginx + Tomcat 配置负载均衡

    最近在读埃隆·马斯克传记,他说「我认为现在有非常多的聪明人都在致力于互联网」. 仔细一想,好像真的是这样的. 我问了自己一个问题:如果你不敲代码了,你能做什么? 答案令人极其恐怖.吓得我赶紧又去写了一 ...

  10. 分库代价高的情况下,如何优化ES解决亿级数据量检索

    数据平台已迭代三个版本,从一开始遇到很多常见的难题,到现在终于有片段时间整理一些已完善的文档,在此分享以供所需朋友的实现参考,但愿能帮助大家少走些弯路,在此篇幅中偏重于ElasticSearch的优化 ...