喜闻乐见的简单树套树= =第一维按权值建树状数组,第二维按下标建动态开点线段树,修改相当于第二维区间加,查询在树状数组上二分,比一般的线段树还短= =可惜并不能跑过整体二分= =另外bzoj上的数据有负数= =其他树套树方法也是可以的爱怎么套怎么套= =

#include<cstdio>
#define J (i+j>>1)
#define I (J+1)
typedef unsigned ll;
const int N=1e5+5;
ll n,m,q,i,j,k,s,t,u,v;
struct node{
ll s,t;
node*i,*j;
}e[N*320];
node*a=e,*r[N];
void vary(node*&o,int s,int t,int i=1,int j=n){
if(!o)o=a++;
o->s+=t-s+1;
if(s==i&&t==j)++o->t;
else if(t<I)
vary(o->i,s,t,i,J);
else if(s>J)
vary(o->j,s,t,I,j);
else{
vary(o->i,s,J,i,J);
vary(o->j,I,t,I,j);
}
}
void ask(node*o,int s,int t,int i=1,int j=n){
if(!o)return;
if(s==i&&t==j)u+=o->s;
else{
u+=o->t*(t-s+1);
if(t<I)
ask(o->i,s,t,i,J);
else if(s>J)
ask(o->j,s,t,I,j);
else{
ask(o->i,s,J,i,J);
ask(o->j,I,t,I,j);
}
}
}
int main(){
scanf("%d%d",&n,&q);
m=n<<1^1;
while(q--){
scanf("%d%d%d%d",&j,&s,&t,&k);
if(j==2){
for(i=65536,v=j=0;i;i>>=1)
if(j+i<=m){
u=0,ask(r[j+i],s,t);
if(v+u<k)
j+=i,v+=u;
}
printf("%d\n",n-j);
}else
for(i=n-k+1;i<=m;i+=i&-i)
vary(r[i],s,t);
}
}

最新文章

  1. [LeetCode] Candy 分糖果问题
  2. 用 Blend 给Windows Phone 应用创建 示例数据
  3. No.022:Generate Parentheses
  4. sklearn Model-selection + Pipeline
  5. 一个简单的Dump转文本工具—Dump2Text
  6. 【转载】Apache kafka原理与特性(0.8V)
  7. 【最大流之EdmondsKarp算法】【HDU1532】模板题
  8. 第001篇——C#学习计划开启
  9. 论山寨手机与Android联姻 【6】MTK手机的基带芯片
  10. 冒泡排序算法 C++和PHP达到
  11. 1599: [Usaco2008 Oct]笨重的石子
  12. 《effective Go》读后记录
  13. Theano学习-scan循环
  14. Java I/O 总结
  15. coursera-斯坦福-机器学习-吴恩达-笔记week4
  16. jcaptcha和kaptcha验证码使用入门【转】
  17. C# 3.0 / C# 3.5 隐式(推断)类型 var
  18. php格式化数字:位数不足前面加0补足
  19. 2.启动MySql服务
  20. 图片通过Base64Coder编码、解码

热门文章

  1. TCP三次握手建立连接
  2. 基于Ajax+div的“左边菜单、右边内容”页面效果实现
  3. mysql 常用sql
  4. 设计模式C#实现(十三)——享元模式(蝇量模式)
  5. 烂泥:阿里云RDS本地恢复数据
  6. redis 基础
  7. ASP.NET MVC 5 with EF 6 上传文件
  8. 基于Windows10 x64+visual Studio2013+Python2.7.12环境下的Caffe配置学习
  9. Microsoft-Office-Professional-Plus-2007
  10. 洛谷P3388 【模板】割点