简单题(bzoj 1683)
Description
|
命令 |
参数限制 |
内容 |
|
1 x y A |
1<=x,y<=N,A是正整数 |
将格子x,y里的数字加上A |
|
2 x1 y1 x2 y2 |
1<=x1<= x2<=N 1<=y1<= y2<=N |
输出x1 y1 x2 y2这个矩形内的数字和 |
|
3 |
无 |
终止程序 |
Input
Output
Sample Input
1 2 3 3
2 1 1 3 3
1 2 2 2
2 2 2 3 4
3
Sample Output
5
HINT
/*
第一次写cdq分治,先看了2013年集训队作业中许昊然的论文,有了一点初步理解,然后又做这个题,
感觉对cdq分治的大概思路有了一定认识。 cdq分治要求可离线,并且各个修改操作之间互不影响,且对查询操作的贡献独立。
我们考虑将操作分治,那么后一般操作中的修改是独立的,查询至于前一半的所有修改和后一般在它时间之前的修改有关,
对于前一半修改可以预处理,对于后一半在它之前的,可以递归处理。 这个题目的数据范围二维数据结构是不好过的,所以可以考虑将某一维排序,然后用一位数据结构维护。
我们用前缀和的思想,将求和操作理解为四个单点查询操作,然后对于每个查询操作x,y,对他有贡献的修改操作
一定是时间在它之前的并且x比它小的,所以我们可以按照x坐标排序,然后用树状数组维护y坐标的值。
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#define N 800010
using namespace std;
int n,tot,T,ans[N],tree[N];
struct node{
int op,x,y,A,no,belong;
};node Q[N],tq[N];
bool cmp(const node&s1,const node&s2){
if(s1.x==s2.x&&s1.y==s2.y) return s1.op<s2.op;
if(s1.x==s2.x) return s1.y<s2.y;
return s1.x<s2.x;
}
void modify(int x,int v){
while(x<=n){
tree[x]+=v;
x+=x&(-x);
}
}
int query(int x){
int sum=;
while(x){
sum+=tree[x];
x-=x&(-x);
}
return sum;
}
void solve(int l,int r){
if(l==r)return;
int mid=l+r>>;
for(int i=l;i<=r;i++)
if(Q[i].no<=mid&&Q[i].op==) modify(Q[i].y,Q[i].A);
else if(Q[i].no>mid&&Q[i].op==){
if(Q[i].A) ans[Q[i].belong]+=query(Q[i].y);
else ans[Q[i].belong]-=query(Q[i].y);
}
for(int i=l;i<=r;i++)
if(Q[i].no<=mid&&Q[i].op==) modify(Q[i].y,-Q[i].A);
int l1=l,l2=mid+;
for(int i=l;i<=r;i++)
if(Q[i].no<=mid)tq[l1++]=Q[i];
else tq[l2++]=Q[i];
for(int i=l;i<=r;i++)
Q[i]=tq[i];
solve(l,mid);solve(mid+,r);
}
int main(){
scanf("%d",&n);
int opt,x,y,v,x1,y1;
while(){
scanf("%d",&opt);
if(opt==){
scanf("%d%d%d",&x,&y,&v);
Q[++tot].op=;Q[tot].x=x;Q[tot].y=y;Q[tot].A=v;Q[tot].no=tot;
}
else if(opt==){
scanf("%d%d%d%d",&x,&y,&x1,&y1);
Q[++tot].op=;Q[tot].x=x-;Q[tot].y=y-;Q[tot].A=;Q[tot].no=tot;Q[tot].belong=++T;
Q[++tot].op=;Q[tot].x=x-;Q[tot].y=y1;Q[tot].A=;Q[tot].no=tot;Q[tot].belong=T;
Q[++tot].op=;Q[tot].x=x1;Q[tot].y=y-;Q[tot].A=;Q[tot].no=tot;Q[tot].belong=T;
Q[++tot].op=;Q[tot].x=x1;Q[tot].y=y1;Q[tot].A=;Q[tot].no=tot;Q[tot].belong=T;
}
else break;
}
sort(Q+,Q+tot+,cmp);
solve(,tot);
for(int i=;i<=T;i++)
printf("%d\n",ans[i]);
return ;
}
简单题(bzoj 1683)的更多相关文章
- 【BZOJ】【4066】简单题(强制在线)
KD-Tree KD-Tree的进阶姿势戳这里 http://zyfzyf.is-programmer.com/posts/92431.html 为啥有种线段树&平衡树的即视感……(树形结构的 ...
- BZOJ 2683: 简单题
2683: 简单题 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 913 Solved: 379[Submit][Status][Discuss] ...
- bzoj 4066: 简单题 kd-tree
4066: 简单题 Time Limit: 50 Sec Memory Limit: 20 MBSubmit: 234 Solved: 82[Submit][Status][Discuss] De ...
- BZOJ 3687: 简单题 bitset
3687: 简单题 Time Limit: 10 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description 小呆开始研究集合论了,他 ...
- bzoj 1176: [Balkan2007]Mokia&&2683: 简单题 -- cdq分治
2683: 简单题 Time Limit: 50 Sec Memory Limit: 128 MB Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要 ...
- 【BZOJ4066】简单题(KD-Tree)
[BZOJ4066]简单题(KD-Tree) 题面 BZOJ 题解 如果这题不卡空间,并且不强制在线的话 显然可以用\(CDQ\)分治做 但是它又卡空间又强制在线,于是我们欢快的来用\(KD-Tree ...
- bzoj4066: 简单题 K-Dtree
bzoj4066: 简单题 链接 bzoj 思路 强制在线.k-dtree. 卡常啊.空间开1e6就T了. 代码 #include <bits/stdc++.h> #define my_m ...
- 【BZOJ-1176&2683】Mokia&简单题 CDQ分治
1176: [Balkan2007]Mokia Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 1854 Solved: 821[Submit][St ...
- Bzoj4066 简单题
Time Limit: 50 Sec Memory Limit: 20 MBSubmit: 2185 Solved: 581 Description 你有一个N*N的棋盘,每个格子内有一个整数,初 ...
- Bzoj2683 简单题
Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 1071 Solved: 428 Description 你有一个N*N的棋盘,每个格子内有一个整数, ...
随机推荐
- druid 配置WebStatFilter 网络统计以及监控
WebStatFilter用于采集web-jdbc关联监控的数据. web.xml配置 <filter> <filter-name>DruidWebStatFilter< ...
- QT +自定义控件-spin+slider
动手实现自定义控件: 1.首先在ui界面中添加一个(Widget)容器类.如图中的1所示 2.在项目中添加一个SmallWidget类,如下: 3.接着在程序编辑界面进行程序编辑如下: #includ ...
- 安装VC++6.0实验环境
安装VC++6.0步骤:(1)下载一个压缩包进行解压(2)点击打开解压后的文件(3)找到文件里的程序进行安装(4)等待安装完成该程序后可以试着运行一下此程序,在此我们需要了解编写程序的步骤和注意事项. ...
- POI转换word doc文件为(html,xml,txt)
在POI中还存在有针对于word doc文件进行格式转换的功能.我们可以将word的内容转换为对应的Html文件,也可以把它转换为底层用来描述doc文档的xml文件,还可以把它转换为底层用来描述doc ...
- Spring框架 全注解annotation不使用配置文件(SpringConfiguration.java类代替) 补充 xml配置文件没有提示解决
全注解不使用配置文件 首先还是倒包 在原有的jar包: 需Spring压缩包中的四个核心JAR包 beans .context.core 和expression 下载地址: https://pan.b ...
- C# 读App.config配置文件[2]: .Net Core框架
C# 读App.config配置文件[1]:.Net Framework框架 C# 读App.config配置文件[2]: .Net Core框架 网上都是.net framework读取配置文件的方 ...
- DOM事件总结
1.DOM事件: DOM0: element.onclick=function(){} DOM2: element.addEventListener(‘click’,function(){}) add ...
- 【DB_MySQL】查询语句中各子句的执行顺序
1. FROM 指明查询来源 2. WHERE筛选元组 3. GROUP BY进行分组 4. HAVING 筛选分组 5. SELECT 投影出指定的字段列 6. ORDER BY 对结果集排序 7. ...
- laravel中的视图合成器
==================================================================================================== ...
- 【转发】【linux】【ftp】CentOS 7.0安装配置Vsftp服务器
adduser -d /var/www/android -g ftp -s /sbin/nologin ftp2 一.配置防火墙,开启FTP服务器需要的端口 CentOS 7.0默认使用的是firew ...