2683: 简单题

Time Limit: 50 Sec  Memory Limit: 128 MB
Submit: 1803  Solved: 731
[Submit][Status][Discuss]

Description

你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作:

命令

参数限制

内容

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

输入文件第一行一个正整数N。
接下来每行一个操作。
 

Output

对于每个2操作,输出一个对应的答案。
 

Sample Input

4
1 2 3 3
2 1 1 3 3
1 2 2 2
2 2 2 3 4
3

Sample Output

3
5

HINT

1<=N<=500000,操作数不超过200000个,内存限制20M。
对于100%的数据,操作1中的A不超过2000。

cdq分治三维偏序 三维分别是操作序号,横坐标,纵坐标
把一个询问拆成4个,就变成了处理二维前缀和问题
对横坐标排序,操作序号cdq分治,纵坐标用bit处理

 #include<bits/stdc++.h>
#define N 200005
using namespace std;
int n,m,t,c[N*],ans[N];
struct query{
int x,y,v,id,op,bl;
bool operator < (const query &b)const{
if(x==b.x&&y==b.y)return id<b.id;
return x==b.x?y<b.y:x<b.x;
}
}q[N<<],a[N<<]; void add(int x,int y,int v){
if(!x||!y)return;
q[++m].x=x;q[m].y=y;q[m].id=m;
q[m].op=;q[m].bl=t;q[m].v=v;
}
void update(int p,int x){
while(p<=n){
c[p]+=x;
p+=p&-p;
}
}
int ask(int x){
int ret=;
while(x){
ret+=c[x];
x-=x&-x;
}
return ret;
} void solve(int l,int r){
if(l==r)return;
int mid=(l+r)>>,p1=l,p2=mid+;
for(int i=l;i<=r;++i){
if(q[i].id<=mid&&q[i].op==)update(q[i].y,q[i].v);
if(q[i].id>mid&&q[i].op==)ans[q[i].bl]+=ask(q[i].y)*q[i].v;
}
for(int i=l;i<=r;++i)
if(q[i].op==&&q[i].id<=mid)update(q[i].y,-q[i].v);
for(int i=l;i<=r;++i){
if(q[i].id<=mid)a[p1++]=q[i];
else a[p2++]=q[i];
}
for(int i=l;i<=r;++i)q[i]=a[i];
solve(l,mid);solve(mid+,r);
}
int main(){
scanf("%d",&n);
while(){
static int op,x1,x2,y1,y2,v;
scanf("%d",&op);
if(op==){
scanf("%d%d%d",&x1,&y1,&v);
q[++m].x=x1;q[m].y=y1;q[m].v=v;
q[m].id=m;q[m].op=op;
}
if(op==){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);++t;
add(x1-,y1-,);add(x2,y2,);
add(x1-,y2,-);add(x2,y1-,-);
}
if(op==)break;
}
sort(q+,q++m);
solve(,m);
for(int i=;i<=t;i++)
printf("%d\n",ans[i]);
return ;
}

bzoj2683简单题 cdq分治的更多相关文章

  1. BZOJ2683: 简单题(cdq分治 树状数组)

    Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 2142  Solved: 874[Submit][Status][Discuss] Descripti ...

  2. Bzoj2683 简单题 [CDQ分治]

    Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 1071  Solved: 428 Description 你有一个N*N的棋盘,每个格子内有一个整数, ...

  3. 【BZOJ1176】[Balkan2007]Mokia/【BZOJ2683】简单题 cdq分治

    [BZOJ1176][Balkan2007]Mokia Description 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=1600 ...

  4. 【bzoj1176】[Balkan2007]Mokia/【bzoj2683】简单题 CDQ分治+树状数组

    bzoj1176 题目描述 维护一个W*W的矩阵,初始值均为S(题目描述有误,这里的S没有任何作用!).每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数 ...

  5. 【BZOJ-1176&2683】Mokia&简单题 CDQ分治

    1176: [Balkan2007]Mokia Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 1854  Solved: 821[Submit][St ...

  6. bzoj 1176: [Balkan2007]Mokia&&2683: 简单题 -- cdq分治

    2683: 简单题 Time Limit: 50 Sec  Memory Limit: 128 MB Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要 ...

  7. BZOJ 2683: 简单题 [CDQ分治]

    同上题 那你为什么又发一个? 因为我用另一种写法又写了一遍... 不用排序,$CDQ$分治的时候归并排序 快了1000ms... #include <iostream> #include ...

  8. BZOJ 2683 简单题 cdq分治+树状数组

    题意:链接 **方法:**cdq分治+树状数组 解析: 首先对于这道题,看了范围之后.二维的数据结构是显然不能过的.于是我们可能会考虑把一维排序之后还有一位上数据结构什么的,然而cdq分治却可以非常好 ...

  9. BZOJ 2683: 简单题(CDQ 分治)

    题面 Time Limit: 50 Sec  Memory Limit: 128 MB Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: ...

随机推荐

  1. NetFPGA-1G-CML从零开始环境配置

    NetFPGA-1G-CML从零开始环境配置 前言 偶得一块NetFPGA-1G-CML,跟着github对NetFPGA-1G-CML的入门指南,一步步把配置环境终于搭建起来,下面重新复现一下此过程 ...

  2. Mybatis学习日志

    在Mybatis深入学习的一周中,总感觉跟着师傅的视屏讲解什么都能懂,但实际自己操作的时候才发现自己一脸懵逼,不知道从何入手.但还好自己做了点笔记.在此记录一下自己浅度学习Mybatis遇到几个小问题 ...

  3. LeetCode & Q189-Rotate Array-Easy

    Array Description: Rotate an array of n elements to the right by k steps. For example, with n = 7 an ...

  4. ActiveMQ学习系列(一)

    一.JMS规范 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消 ...

  5. 阿里云下Linux服务器安装Mysql、mongodb

    阿里云下Linux服务器安装Mysql.mongodb 一.MySQL的安装和配置 1.安装rpm包 rpm -Uvh http://dev.mysql.com/get/mysql-community ...

  6. python 评论楼

    评论楼 从数据库中取出本篇博客的所有评论使用python语句将评论整理成具有层级关系的列表 typename=request.POST.get('typename') comment_list = m ...

  7. Why deep learning?

    1. 深度学习中网络越深越好么? 理论上说是这样的,因为网络越深,参数也越多,拟合能力也越强(但实际情况是,网络很深的时候,不容易训练,使得表现能力可能并不好). 2. 那么,不同什么深度的网络,在参 ...

  8. in成员资格符

    #in成员资格符 name='小树' '小'in name# 返回True '大树'in name#返回False

  9. Scrollbar

    Scrollbar(滚动条)组件用于滚动一些组件的可见范围,可分为垂直和水平的. 用法: from tkinter import * root =Tk() #滚动条组件 sb = Scrollbar( ...

  10. Menu-菜单组件

    #menu菜单组件 from tkinter import * master=Tk() def callback(): print('你好咯!!') m = Menu(master) m.add_co ...