(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 这题的解法很妙啊... 考虑这三个点可能的形态: 令它们的重心为距离到这三个点都相同的节点, 则其中两个点分别在重心的两棵子树中, 且到重心的距离相等; 第三个点可能在重心的一棵不同 ...
随机推荐
- js input 只能输入数字
HTML网页上这么写 <input type="text" style="ime-mode:disabled;" onpaste="return ...
- Codeforces Round #283 (Div. 2) A
解题思路:给出一个递增数列,a1,a2,a3,-----,an.问任意去掉a2到a3之间任意一个数之后, 因为注意到该数列是单调递增的,所以可以先求出原数列相邻两项的差值的最大值max, 得到新的一个 ...
- 更博不能忘——webpack学习笔记
webpack是前端构建系统就像grunt和gulp(之前有学习过grunt所以也就大概明白webpack是个什么东西),所以说前端技术大部分还真是相通的,现在觉得当时多看的东西并不白费,虽然长时间不 ...
- day09-2 字典,集合的内置方法
目录 字典的内置方法 作用 定义方式 方法 优先掌握 需要掌握 存储一个值or多个值 有序or无序 可变or不可变 集合的内置方法 作用 定义方式 方法 存储一个值or多个值 有序or无序 可变or不 ...
- JS取出特定字符前后的字符串,针对一串字符里面的单个字符前后的字符串
//针对一串自负里面的单个字符前后的字符串<!doctype html> <html> <head> <meta charset="utf-8&qu ...
- unity 显示、隐藏Android导航栏
1.下面的返回.home栏可用Screen.fullScreen控制 2.导航栏的显示和隐藏用下面代码控制 private AndroidJavaObject currentActivity { ge ...
- 【 【henuacm2016级暑期训练】动态规划专题 P】Animals
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 第i只动物如果饲养它的话. 代价是固定的就是(n-i+1)a[i] 所以相当于给你n个物品,每个物品的重量为(n-i+1)a[i], ...
- springmvc 异常Interceptor
无论做什么项目,进行异常处理都是非常有必要的,而且你不能把一些只有程序员才能看懂的错误代码抛给用户去看,所以这时候进行统一的异常处理,展现一个比较友好的错误页面就显得很有必要了. springMVC提 ...
- u-boot学习(六):自己写bootloader
依照前面分析的u-boot的启动流程,自己写一个简单的Bootloader.这是參考韦东山老师的视频写的. 1.初始化硬件:关看门狗.设置时钟.设置SDRAM.初始化NAND Flash 2.假设Bo ...
- Cocos2d-x-lua学习点滴
Lua下的方法.自己项目经验,个人见解,不能确保正确. Sprite: local Light = CCSprite:create("light.png") ...