一开始还离散化弄了好久  离散化细节弄得好差

这题用二维树状数组做很快  因为树状数组下标不为0  所以所有下标要加一处理

还有就是算矩阵的时候要处理两个坐标的大小关系

个人感觉树状数组用for语句写更加简洁

#include<bits/stdc++.h>
using namespace std;
int c[][];
int n;
int lowbit(int i)
{
return i&-i;
}
void update(int x,int y,int v)
{
for(int i=x;i<n;i+=lowbit(i))
for(int j=y;j<n;j+=lowbit(j))
c[i][j]+=v;
}
long long sum(int x,int y)
{
long long ans=;
for(int i=x;i>;i-=lowbit(i))
for(int j=y;j>;j-=lowbit(j))
ans+=c[i][j];
return ans;
}
int main()
{
int cas;
scanf("%d",&cas);
n=;
for(int i=;i<=cas;i++)
{
printf("Case %d:\n",i);
memset(c,,sizeof(c));
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
update(i,j,);
int q;
scanf("%d",&q);
char s[];
int x1,x2,y1,y2,n1;
while(q--)
{
scanf("%s",s);
if(s[]=='A')
{
scanf("%d%d%d",&x1,&y1,&n1);
update(x1+,y1+,n1);
}
else if(s[]=='D')
{
scanf("%d%d%d",&x1,&y1,&n1);
x1++;y1++;
int w=sum(x1,y1)-sum(x1,y1-)-sum(x1-,y1)+sum(x1-,y1-);
if(w-n1>=) update(x1,y1,-n1);
else update(x1,y1,-w);
}
else if (s[]=='S')
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
x1++;y1++;x2++;y2++;
if(x1>x2)swap(x1,x2);
if(y1>y2)swap(y1,y2);
printf("%d\n", sum(x2,y2)-sum(x2,y1-)-sum(x1-,y2)+sum(x1-,y1-) );
}
else if(s[]=='M')
{
scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&n1);
x1++;y1++;x2++;y2++;
int w=sum(x1,y1)-sum(x1,y1-)-sum(x1-,y1)+sum(x1-,y1-);
if(w>=n1){ update(x1,y1,-n1);update(x2,y2,n1); }
else {update(x1,y1,-w);update(x2,y2,w);}
}
}
}
return ;
}

See you~ HDU1892的更多相关文章

  1. HDU1892二维树状数组

    See you~ Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Su ...

  2. hdu-1892 See you~---二维树状数组运用

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1892 题目大意: 题目大意:有很多方格,每个方格对应的坐标为(I,J),刚开始时每个格子里有1本书, ...

  3. HDU1892 See you~

    Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission( ...

  4. See you~(hdu1892)

    See you~ Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Su ...

  5. BZOJ1173 CDQ分治 笔记

    目录 二维数据结构->cdq 预备知识 T1: 二维树状数组 T2:cdq分治 bzoj1176 mokia:Debug心得 一类特殊的CDQ分治 附: bzoj mokia AC代码 二维数据 ...

随机推荐

  1. Mac下使用Wine安装PowerDesigner15

    下载: (链接: https://pan.baidu.com/s/1bpEYyIV 密码: 5ymj) 安装: 1.安装Wine 参考:http://www.cnblogs.com/EasonJim/ ...

  2. android 简单的画图片

    layout: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns: ...

  3. Linux - 包不同安装方式

    rpm 软件包管理器 安装编译包好的二进制包 方式 rpm -ivh lynx # rpm安装 rpm -e lynx # 卸载包 rpm -e lynx --nodeps # 强制卸载 rpm -q ...

  4. PhoneUtil

    package cn.fraudmetrix.octopus.horai.biz.utils; import org.springframework.util.StringUtils; import ...

  5. python - 迭代器(迭代协议/可迭代对象)

    迭代器 # 迭代器协议 # 迭代协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就触发一个 StopIteration 异常,以终止迭代(只能往后走不能往前退) # 可迭代对 ...

  6. js sort方法根据数组中对象的某一个属性值进行排序

    sort方法接收一个函数作为参数,这里嵌套一层函数用来接收对象属性名,其他部分代码与正常使用sort方法相同. var arr = [ {name:'zopp',age:0}, {name:'gpp' ...

  7. Vim中自动在程序起始处添加版权和作者信息

    在编写程序的时候,经常需要在程序开始写上程序的简要介绍和作者信息,如下: 这种信息,除了文件名和修改时间可能经常发生变化外,其他基本不变,可以在程序开始自动加入,方法就是在家目录下的.vimrc中写入 ...

  8. Linux注销&登陆

    ⒈注销 ①在命令行使用logout,此指令在图形界面无效.

  9. SpringBoot集成监控管理

    (1).添加starter依赖 <dependency> <groupId>org.springframework.boot</groupId> <artif ...

  10. adboost方法(转载)

    转载链接:http://blog.csdn.net/google19890102/article/details/46376603 一.集成方法(Ensemble Method)     集成方法主要 ...