题目大意:给你一个长度为$n$的数列$a_i$,定义$f_i=\sum_{j=l_i}^{r_i} num_j$。

有$m$个操作:

操作1:询问一个区间$l,r$请你求出$\sum_{i=l}^{r} f_i$。

操作2:将$a_x$变成$y$。

此题貌似正常做都不是很好做,考虑用一些奇奇怪怪的做法(比如说分块)

考虑到此题数列在不断地变化,我们考虑用树状数组来维护序列$a$,查询$f_i$的值可以在$O(log n)$的时间内完成。

如果这么做,单次询问的复杂度是$O(n log n)$的,显然不行。

我们令第$k$块中包含有函数$f(kN),f(kN+1).......f(kN+(N-1))$。其中$N$是一个常数

设$sum[i][j]$表示第i块中所有函数中数字$a_j$出现的次数。

设$ans[i]$表示第i块所有函数之和。

显然$ans[i]=\sum_{j=1}^{n} sum[i][j]\times num[j]$。

对于一个询问的区间,我们显然可以将其拆成尽可能多的块+不超过$2N$个单点;

对于每个块的块的和,我们显然可以在$O(1)$的复杂度内完成求值。

对于单点部分,我们直接查询就可以了。

对于修改操作;

首先我们更新树状数组,然后根据$sum[i][X]$的值来更新$ans[i]$即可,时间复杂度是$O(log\ n+\sqrt{n})$。

总时间复杂度为$O(n^{1.5}\ log\  n)$

这次的分块应该是编码效率最高的一次了

 #include<bits/stdc++.h>
#define M 100005
#define N 360
#define lowbit(x) ((x)&(-(x)))
#define L unsigned long long
int n,m,l[M]={},r[M]={};
int sum[][M]={},num[M]={},bel[M]={};
L ans[M]={},a[M]={};
void add(int x,int k){for(int i=x;i<=n;i+=lowbit(i)) a[i]+=k;}
L Q(int x){L k=; for(int i=x;i;i-=lowbit(i)) k+=a[i]; return k;}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++) bel[i]=(i+N-)/N;
for(int i=;i<=n;i++) scanf("%d",num+i),add(i,num[i]);
for(int i=;i<=n;i++){
scanf("%d%d",l+i,r+i);
ans[bel[i]]+=Q(r[i])-Q(l[i]-);
sum[bel[i]][l[i]]++; sum[bel[i]][r[i]+]--;
}
for(int x=;x<=bel[n];x++)
for(int i=;i<=n;i++) sum[x][i]+=sum[x][i-];
scanf("%d",&m);
while(m--){
int op,X,Y;L res=; scanf("%d%d%d",&op,&X,&Y);
if(op==){
for(int x=;x<=bel[n];x++)
ans[x]+=1LL*sum[x][X]*(Y-num[X]);
add(X,Y-num[X]); num[X]=Y;
}else{
if(bel[X]==bel[Y]){
for(int i=X;i<=Y;i++) res+=Q(r[i])-Q(l[i]-);
printf("%llu\n",res);
continue;
}
for(int x=bel[X]+;x<bel[Y];x++) res+=ans[x];
for(int i=X;bel[X]==bel[i];i++) res+=Q(r[i])-Q(l[i]-);
for(int i=Y;bel[Y]==bel[i];i--) res+=Q(r[i])-Q(l[i]-);
printf("%llu\n",res);
}
}
}

【xsy2111】 【CODECHEF】Chef and Churus 分块+树状数组的更多相关文章

  1. 【XSY2111】Chef and Churus 分块 树状数组

    题目描述 有一个长度为\(n\)的数组\(A\)和\(n\)个区间\([l_i,r_i]\),有\(q\)次操作: \(1~x~y\):把\(a_x\)改成\(y\) \(2~x~y\):求第\(l\ ...

  2. 【分块+树状数组】codechef November Challenge 2014 .Chef and Churu

    https://www.codechef.com/problems/FNCS [题意] [思路] 把n个函数分成√n块,预处理出每块中各个点(n个)被块中函数(√n个)覆盖的次数 查询时求前缀和,对于 ...

  3. 【BZOJ 3295】动态逆序对 - 分块+树状数组

    题目描述 给定一个1~n的序列,然后m次删除元素,每次删除之前询问逆序对的个数. 分析:分块+树状数组 (PS:本题的CDQ分治解法见下一篇) 首先将序列分成T块,每一块开一个树状数组,并且先把最初的 ...

  4. 【bzoj2141】排队 分块+树状数组

    题目描述 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家乐和和.红星幼儿园的小朋友们排起了长长地队伍,准备吃果果.不过因为小朋友们的身高有所区别, ...

  5. 【bzoj3744】Gty的妹子序列 分块+树状数组+主席树

    题目描述 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见…… 某天,蒟蒻Autumn发现了从 Gty的妹子树(bzoj3720) 上掉落下来了许多妹子,他发现 她们排成 ...

  6. Bzoj 3295: [Cqoi2011]动态逆序对 分块,树状数组,逆序对

    3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2886  Solved: 924[Submit][Stat ...

  7. BZOJ3787:Gty的文艺妹子序列(分块,树状数组)

    Description Autumn终于会求区间逆序对了!Bakser神犇决定再考验一下他,他说道: “在Gty的妹子序列里,某个妹子的美丽度可也是会变化的呢.你还能求出某个区间中妹子们美丽度的逆序对 ...

  8. 2018.06.30 BZOJ4765: 普通计算姬(dfs序+分块+树状数组)

    4765: 普通计算姬 Time Limit: 30 Sec Memory Limit: 256 MB Description "奋战三星期,造台计算机".小G响应号召,花了三小时 ...

  9. [P3759][TJOI2017]不勤劳的图书管理员(分块+树状数组)

    题目描述 加里敦大学有个帝国图书馆,小豆是图书馆阅览室的一个书籍管理员.他的任务是把书排成有序的,所以无序的书让他产生厌烦,两本乱序的书会让小豆产生 这两本书页数的和的厌烦度.现在有n本被打乱顺序的书 ...

随机推荐

  1. 2018秋季c语言基础课第一次作业

    1)大学和高中最大的不同是没有人天天看着你,请看大学理想的师生关系是?有何感想? 答:邹欣老师提到了很多种关系,不外呼就是两种:平等或者不平等.平等的师生关系与陌生人无异,而自古以来尊师重道却被世人所 ...

  2. KBMMW 4.70.00 发布

    We are happy to announce the release of kbmMW v. 4.70.00 Professional and Enterprise Edition. kbmMW ...

  3. 卡特尔16PF性格测试与答案

    大学生在职业生涯规划时,必须充分注意到自己的性格和职业的适宜性.性格是指一个人在生活中形成的对现实的稳定的态度和行为方式.研究表明,性格影响着一个人的职业取向,由于性格的不同,每个人对工作和职业的态度 ...

  4. 20155226 2016-2017-2 《Java程序设计》第7周学习总结

    20155226 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 认识时间与日期 六个时间基准: 1.格林威治标准时间 2.世界时 3.国际原子时 4.世界协 ...

  5. (转)SQL Server 2008无法修改表的解决办法

    转自:http://www.soaspx.com/dotnet/sql/mssql/sql2008/sqlserver2008_20121010_9683.html 在SQL Server 2008 ...

  6. The First Android App----Starting Another Activity

    To respond to the button's on-click event, open the activity_main.xml layout file and add the androi ...

  7. SoC FPGA JTAG电路设计 要点

    JTAG协议制定了一种边界扫描的规范,边界扫描架构提供了有效的测试布局紧凑的PCB板上元件的能力.边界扫描可以在不使用物理测试探针的情况下测试引脚连接,并在器件正常工作的过程中捕获运行数据. SoC ...

  8. Apache服务器的简单配置与安全策略

    在之前讲的关于weevely后门分析中,有说到利用Apache的配置文件.htaccess来隐藏php后门.关于.htaccess文件的用途,在此结合Apache服务器的具体配置作一详解,也算是自己的 ...

  9. eclipse 安装

    做一个项目,需要搭建环境.使用sql server 2005,tomcat,eclipse.过程真复杂,碰到些小问题,不过都解决了,还算顺利. win7下sql server 2005安装:http: ...

  10. Ansible Ad-Hoc命令

    -a:传入模块的参数,不同的模块要传入的参数不同 -B SECOND:当任务放到后台执行异步任务,设置程序运行的超时时间,传入的是一个数值,单位秒 -C:测试该任务能否正常运行,不对被管理主机做出任何 ...