[2016北京集训试题15]cot-[分块]
Description
Solution
如图,假如我们知道了以任何一个点为顶点的135-180度的前缀和和90-180度的前缀和,我们就可以搞出三角形的面积。
差分。add[i][j]和dev[i][j]都表示相对点[i][j-1],点[i][j]应该+或-的大小。这样只要我们需要,可以在O(n2)的时间里求出整个图的前缀和。
然后,不可能每一次查询都求一次前缀和的。考虑分块。记录当前添加的修改的操作数cnt。如果cnt=2500,则把图的前缀和全部求出来,对cnt,add,dev初始化。
假如中途有询问,就计算好之前分出的若干块对本次询问的贡献后,i直接从1到cnt枚举,判断当前的修改对询问的贡献。
Code
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
int n,Q;int opt,x,y,a,cnt,xx[],yy[],aa[];
ll sum_slain[][],sum_line[][],num[][];
int add[][],dev[][],cur[][];
void work()
{
for (int i=;i<=n;i++) for (int j=;j<=i;j++)
{
add[i][j]+=add[i-][j];
dev[i][j]+=dev[i-][j-];
cur[i][j]=cur[i][j-]+add[i][j]-dev[i][j];
num[i][j]+=cur[i][j];
sum_line[i][j]=sum_line[i-][j]+sum_line[i][j-]-sum_line[i-][j-]+num[i][j];
sum_slain[i][j]=sum_slain[i-][j-]+sum_line[i][j-]-sum_line[i-][j-]+num[i][j];
}
memset(add,,sizeof(add));memset(dev,,sizeof(dev));cnt=;
}
ll ans;
int main()
{
scanf("%d%d",&n,&Q);
while (Q--)
{
scanf("%d%d%d%d",&opt,&x,&y,&a);
if (opt==)
{
cnt++;
add[x][y]++;add[x+a][y]--;
dev[x][y+]++;dev[x+a][y+a+]--;
xx[cnt]=x;yy[cnt]=y;aa[cnt]=a;
if (cnt==) work();
} else
{
ans=sum_slain[x+a-][y+a-]-sum_slain[x-][y-]-sum_line[x+a-][y-]+sum_line[x-][y-];
for (int i=;i<=cnt;i++)
{
int X=min(xx[i]+aa[i]-,x+a-);
int Y=max(yy[i],y);
int Z=max(xx[i]-yy[i],x-y);
int len=X-Z-Y+;
if (len>) ans+=1ll*len*(len+)/;
}
printf("%lld\n",ans);
}
} }
[2016北京集训试题15]cot-[分块]的更多相关文章
- [2016北京集训试题15]项链-[FFT]
Description Solution 设y[i+k]=y[i]+n. 由于我们要最优解,则假如将x[i]和y[σ[i]]连线的话,线是一定不会交叉的. 所以,$ans=\sum (x_{i}-y_ ...
- [2016北京集训试题14]股神小D-[LCT]
Description Solution 将(u,v,l,r)换为(1,u,v,l)和(2,u,v,r).进行排序(第4个数为第一关键字,第1个数为第二关键字).用LCT维护联通块的合并和断开.(维护 ...
- [2016北京集训试题6]mushroom-[bitset]
Description Solution bitset是个好东西啊..强行压位什么的真是够orz. 由于所有的蘑菇上房间的长相是一样的,我们针对每个房间,算出它到根节点的bitset和以它为根的子树的 ...
- [2016北京集训试题6]网络战争-[最小割树(网络流)+kd-tree+倍增]
Description A 联邦国有 N 个州,每个州内部都有一个网络系统,有若干条网络线路,连接各个 州内部的城市. 由于 A 国的州与州之间的关系不是太好,每个州都只有首府建立了到别的州的网络.具 ...
- [2016北京集训试题6]魔法游戏-[博弈论-sg函数]
Description Solution 首先,每个节点上的权值可以等价于该节点上有(它的权的二进制位数+1)个石子,每次可以拿若干个石子但不能不拿. 然后就发现这和NIM游戏很像,就计算sg函数em ...
- [2016北京集训试题8]连在一起的幻想乡[dp+无向图计数]
Description Solution 本博客参考yww大佬的博客,为了加深理解我就自己再写一遍啦. 以下的“无向图”均无重边无自环. 定义f0[n]为n个点构成的无向图个数,f1[n]为n个点构成 ...
- [2016北京集训试题7]thr-[树形dp+树链剖分+启发式合并]
Description Solution 神仙操作orz. 首先看数据范围,显然不可能是O(n2)的.(即绝对不是枚举那么简单的),我们考虑dp. 定义f(x,k)为以x为根的子树中与x距离为k的节点 ...
- (2016北京集训十)【xsy1528】azelso - 概率期望dp
北京集训的题都是好题啊~~(于是我爆0了) 注意到一个重要的性质就是期望是线性的,也就是说每一段的期望步数可以直接加起来,那么dp求出每一段的期望就行了... 设$f_i$表示从$i$出发不回到$i$ ...
- [2016北京集训测试赛15]statement-[线段树+拆环]
Description Solution 由于题目要求,将a[i]->b[i](边权为i)后所得的图应该是由森林和环套树组合而成. 假如是树形结构,所有的t[i]就直接在线段树t[i]点的dfs ...
随机推荐
- 【python】python之tuple元组
tuple特性 python的tuple与列表类似,不同之处在于tuple的元素不能修改. tuple使用小括号,列表使用方括号. tuple创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. ...
- 使用Fiddler模拟客户端http响应
在客户端开发中,常常需要对一些特殊情况做处理,比如404.503等,又比如服务返回错误数据等.而测试这些情况会比较麻烦,往往都是找开发人员配合修改代码,这样效率不高. 接触到Fiddler之后,这样的 ...
- Oracle EBS OM 取消订单
DECLARE l_header_rec OE_ORDER_PUB.Header_Rec_Type; l_line_tbl OE_ORDER_PUB.Line_Tbl_Type; l_action_r ...
- Windows DHCP备份还原命令
DHCP服务器如果要更换,最简单的方法就是命令导入导出 导出netsh dhcp server export e:\dhcp.txt all 导入netsh dhcp server import ...
- seq 序列
seq 序列用法: seq [option]...last seq [option]...first last seq [option]...first increment last 例如:seq 5 ...
- Java语言的主要特点
Java语言有很多的优点,可靠.安全.编译和解释型语言.分布式.多线程.完全面向对象.与平台无关性等等. 与平台无关性 Java语言最大的优势在于与平台无关性,也就是可以跨平台使用. 绝大多数的编程语 ...
- MySQL主从复制异步原理以及搭建
MySQL主从复制的原理: 1.首先,MySQL主库在事务提交时会把数据变更作为时间events记录在二进制日志文件binlog中:MySQL主库上的sync_binlog参数控制Binlog日志以什 ...
- Linux之/etc/fstab文件讲解
/etc/fstab是用来存放文件系统的静态信息的文件.位于/etc/目录下,可以用命令less /etc/fstab 来查看,如果要修改的话,则用命令 vi /etc/fstab 来修改.当系统启动 ...
- 修改TEMPDB所在的路径
USE master go ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'Path\tempdb.mdf') go AL ...
- csv文件的读取
.csv Introduction CSV是一种常以逗号或者制表符分割的文件格式. 利用Excel创建一个csv文件 用记事本打开,实际上是这样子的: 读取csv文件 直接用open()打开 with ...