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 ...
随机推荐
- 微信小程序购物车实现
1,wxml <view class="miniCart-wrap {{isIpx?'is-ipx':''}}"> <view class="miniC ...
- vue--生命周期演示
vue实例的生命周期:https://cn.vuejs.org/v2/guide/instance.html#%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA-Vue-%E5% ...
- python 并发编程 多线程 GIL与Lock
GIL与Lock Python已经有一个GIL来保证同一时间只能有一个线程来执行了,为什么这里还需要互斥锁lock? 锁的目的是为了保护共享的数据,同一时间只能有一个线程来修改共享的数据 GIT保证了 ...
- PERCONA-TOOLKIT 安装 使用
1.基于MySQL主从环境 可以参考https://www.cnblogs.com/xianglei_/p/12068241.html 上传rpm包 并安装 1 2 cd /usr/local/src ...
- HDU 1160 FatMouse's Speed (动态规划、最长下降子序列)
FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- AKKA学习(一)
AKKA简介 什么是AKKA Akka是一个由Scala编写的,能兼容Sacala和JAVA的,用于编写高可用和高伸缩性的Actor模型框架.它基于了事件驱动的并发处理模式,性能非常的高,并且有很高的 ...
- [BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂)
[BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂) 题面 阿申准备报名参加GT考试,准考证号为N位数X1X2-.Xn,他不希望准考证号上出现不吉利的数字.他的不吉利数学A ...
- 初识MySQL <一>
创建一个 表 create table student( id int(10) not null unique auto_increment primary key, name varchar(30) ...
- import cycle not allowed in test
写个 sdk 的测试时报错 import cycle not allowed in test 后发现因为测试文件内多写了导入同包路径. 同 package 下的 xxx_test.go 内不需要额外 ...
- 为了实现动态加载而编写的自己的ClassLoader
Copy备用 之前客户要求在不重启应用的前提下实现动态增加服务及交易,在网上查了很长时间也没发现类似的技术,最后研究了一下ClassLoader.因为项目是与Spring,一开始我和同事尝试替换源码的 ...