(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 这题的解法很妙啊... 考虑这三个点可能的形态: 令它们的重心为距离到这三个点都相同的节点, 则其中两个点分别在重心的两棵子树中, 且到重心的距离相等; 第三个点可能在重心的一棵不同 ...
随机推荐
- vue <router-view>没有渲染
将routes中的components换成component
- 立即调用函数(IIFE)
定义: IIFE:立即调用的函数表达式,声明函数的同时立即调用这个函数. 语法: IIFE的常用写法:这两种写法的作用相同,只是表现形式不同而已,()只是起了自执行的作用 (function(){.. ...
- Day 01 计算机编程基础
1.编程语言是什么? 编程语言是人与计算机交流的介质 2.什么是编程? 用编程语言写出一个个文件,这堆文件会达到一个目的 3.编程有什么用? 让计算机帮助我们干活,从而解放人类劳动力 4.计算机组成原 ...
- elment表格分页
项目的时候遇到了一个分页的bug,经过分析Element源码之后找到了问题所在,现在把这个问题及解决方法记录下来. 项目中要实现的功能是用户选择查看表格的时候在任意页面点击查询,得到结果之后要展示的页 ...
- C文件I/O超详细教程
本文主要参考了C Primer Plus (5th & 6th Edition) 您可以选择本文的部分内容来读,有些内容对于不熟悉MS-DOS的读者可能过于晦涩难懂. C语言文件基本知识 文件 ...
- freeswitch mod_xml_curl
(猜想)调用htttp 进行动态用户注册 流程 用户通过客户端进行注册 填写sip账号密码 进入fs, fs发送http请求配置得地址,request中带着user,key 一些参数, 服务器返回xm ...
- Python破解Wifi密码思路
一.前言说明 本机运行环境:系统环境Win10,运行环境Python3.6,运行工具Pycharm 需要Python的包有:pywifi 这是一种暴力破解wifi的模式,需要的时间比较长,本文主要提供 ...
- SVN提交代码时报405 Method Not Allowed
原因: 1.删除了某个文件夹,然后又创建了一个同名文件夹 2.之前执行过Add操作,但没上传代码,在电脑上提交了同路径的代码,再次上传时会报错 解决方法: 1. 删除出现错误的文件夹 2. SVN U ...
- a.WHERE使用中单行子查询(适用于>,<,=,>=,<=等条件)
a.单行子查询(适用于>,<,=,>=,<=等条件) //查询工资最高的员工编号和员工名 select empno,ename from emp where ...
- 关于android的设备管理器-DevicePolicyManager(一)
在Andorid的设置->安全里面有个设备管理器的选项,相信大部分android用户都不太会去注意这个东西.近期在安装了一个应用之后发现这个里面的东西变了.怎么回事呢,研究研究看看.</s ...