CDOJ 1059 秋实大哥与小朋友 STL(set)+离散化+BIT区间更新单点查询
Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%lld & %llu
System Crawler (2016-04-23)
Description
秋实大哥以周济天下,锄强扶弱为己任,他常对天长叹:安得广厦千万间,大庇天下寒士俱欢颜。
所以今天他又在给一群小朋友发糖吃。
他让所有的小朋友排成一行,从左到右标号。在接下去的时间中,他有时会给一段区间的小朋友每人$v$颗糖,有时会问第$x$个小朋友手里有几颗糖。
这对于没上过学的孩子来说实在太困难了,所以你看不下去了,请你帮助小朋友回答所有的询问。
Input
第一行包含两个整数$n$,$m$,表示小朋友的个数,以及接下来你要处理的操作数。
接下来的$m$行,每一行表示下面两种操作之一:
0 l r v : 表示秋实大哥给[l,r]这个区间内的小朋友每人v颗糖
1 x : 表示秋实大哥想知道第x个小朋友手里现在有几颗糖
$1\leq m, v\leq 100000$,$1\leq l\leq r\leq n$,$1\leq x\leq n$,$1\leq n\leq 100000000$。
Output
对于每一个$1$ $x$操作,输出一个整数,表示第$x$个小朋友手里现在的糖果数目。
Sample Input
3 4
0 1 3 1
1 2
0 2 3 3
1 3
Sample Output
1
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <algorithm>
#include <set>
using namespace std;
typedef long long ll;
typedef unsigned long long Ull;
#define MM(a,b) memset(a,b,sizeof(a));
const double eps = 1e-10;
const int inf = 0x3f3f3f3f;
const double pi=acos(-1);
const int maxn=100000;
ll tri[2*maxn+10];
int n,m;
set<int> judge;
vector<int> point; struct Ope{
int op,l,r,v,pos;
}; int lowbit(int i)
{
return i&(-i);
} ll query(int pos)
{
ll sum=0;
while(pos<=point.size())
{
sum+=tri[pos];
pos+=lowbit(pos);
}
return sum;
}//区间更新中的单点查询 void update(int l,int r,int v)
{
while(r>0)
{
tri[r]+=v;
r-=lowbit(r);
}
int k=l-1;
while(k>0)
{
tri[k]-=v;
k-=lowbit(k);
}
}//区间更新 int main()
{
while(~scanf("%d %d",&n,&m))
{
queue<Ope> opq;
judge.clear();
point.clear();
MM(tri,0); for(int k=1;k<=m;k++)
{
int w,l,r,v,pos;
scanf("%d",&w);
if(w==0)
{
scanf("%d %d %d",&l,&r,&v);
if(!judge.count(l))
{
judge.insert(l);
point.push_back(l);
}
if(!judge.count(r))
{
judge.insert(r);
point.push_back(r);
}
opq.push((Ope){0,l,r,v,0});
}
else
{
scanf("%d",&pos);
if(!judge.count(pos))
{
judge.insert(pos);
point.push_back(pos);
}
opq.push((Ope){1,0,0,0,pos});
}
} sort(point.begin(),point.end());//用point来离散化
while(opq.size())
{
Ope cur=opq.front();opq.pop();
if(cur.op==1)
{
int pos=lower_bound(point.begin(),point.end(),cur.pos)-point.begin()+1;
printf("%lld\n",query(pos));
}//pos代表离散化后在BIT中的位置
else
{
int l=lower_bound(point.begin(),point.end(),cur.l)-point.begin()+1;
int r=lower_bound(point.begin(),point.end(),cur.r)-point.begin()+1;
update(l,r,cur.v);
}
}
}
return 0;
}
1:set可以用来判重judge.count(判断元素的值),但是不能对其进行迭代器的加减法;
2:对要进行操作的点进行离散化;
3:BIT区间更新+单点查询
CDOJ 1059 秋实大哥与小朋友 STL(set)+离散化+BIT区间更新单点查询的更多相关文章
- UESTC 1059 - 秋实大哥与小朋友
题目链接:http://acm.uestc.edu.cn/#/problem/show/1059 Time Limit: 3000/1000MS (Java/Others) Memory Li ...
- UESTC_秋实大哥与小朋友 2015 UESTC Training for Data Structures<Problem A>
A - 秋实大哥与小朋友 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Sub ...
- 2015 UESTC 数据结构专题A题 秋实大哥与小朋友 线段树 区间更新,单点查询,离散化
秋实大哥与小朋友 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 Desc ...
- UESTC-1059 秋实大哥与小朋友(离散化+线段树)
秋实大哥与小朋友 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- CDOJ 1061 C - 秋实大哥与战争 STL set 迭代器
题目链接: C - 秋实大哥与战争 Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%lld & %llu Sub ...
- CDOJ 1069 秋实大哥去打工 单调栈 下标处理
E - 秋实大哥去打工 Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%lld & %llu Submit St ...
- CDOJ 1070 秋实大哥打游戏 带权并查集
链接 F - 秋实大哥打游戏 Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%lld & %llu Submit ...
- CDOJ 1060 秋实大哥与快餐店 字典树 水题
题目链接 B - 秋实大哥与快餐店 Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%lld & %llu Sub ...
- CDOJ 1057 秋实大哥与花 线段树 区间更新+区间查询
链接: I - 秋实大哥与花 Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%lld & %llu Submit ...
随机推荐
- 如何在CBV中使用装饰器
要区分函数装饰器和方法装饰器得区别 ,方法装饰器得第一个参数是self本身,所以函数装饰器不能用
- 关于Tomcat配置问题
一,部署并启动Tomcat服务器 Tomcat: 开源的 Servlet 容器. 解压 apache-tomcat-6.0.16.zip 到一个非中文目录下 配置一个环境变量. java_home(指 ...
- MySQL -2- 体系结构-多实例模块
0.在已创建mysql,port=3306的数据库前提下 需要删除/etc/.my.cnf再做以下操作 cp /etc/my.cnf /etc/my.cnf.3306 1.mkdir -p /u02/ ...
- MySQL总结(4)
insert 数据的插入 INSERT插入数据
- C++中的单例类模板
1,本节课讲述单例类模式,实现并抽取相关代码实现单例类模板,在以后开发工作 中,如果想要使用单例模式,那么直接使用今天开发的单例类模板就可以: 2,需求的提出: 1,在架构设计时,某些类在整个系统生命 ...
- PostgreSQL-临时表空间与配置表
虽然我给数据库创建了表空间,但是操作中仍遇到了些问题,需要创建临时表空间. 配置表 首先了解下 postgres 的配置表,手动修改各种配置. 打开即可看到各种配置,包括临时表空间. 临时表空间 1. ...
- ELK-6.5.3学习笔记–elk基础环境安装
本文预计阅读时间 13 分钟 文章目录[隐藏] 1,准备工作. 2,安装elasticsearch. 3,安装logstash. 4,安装kibana 以往都是纸上谈兵,毕竟事情也都由部门其他小伙伴承 ...
- [.net core]1,asp.net core 的优势及特性
1.跨平台 支持windows ,linux .macOS 可以托管在iis,apache,Docker,或自宿在自己的进程 2.强大的IDE visual studio 或visual studio ...
- QItemDelegate edit某个控件后把数据写回model
QWidget *TrackDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const ...
- 【网络安全】telnet 登陆远程服务器
• 实验环境: a. Vmware 14 PRO b. windows 7 x64 客户机 c. windows server 2008 R2 x64 服务器 ...