HUST-1407 郁闷的小J

离线做法:分别处理每个编号上的各种询问和操作,接着就能用树状数组维护。

#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <cmath>
#include <algorithm>
#include <iostream>
#define rep(i, l, r) for(int i=l; i<=r; i++)
#define clr(x, c) memset(x, c, sizeof(x))
#define lowbit(x) (x&-x)
#define maxn 123456
#define s(x) Size[x]
#define k(x) Key[x]
using namespace std;
inline int read()
{
	int x=0, f=1; char ch=getchar();
	while (!isdigit(ch)) {if (ch==‘-‘) f=-1; ch=getchar();}
	while (isdigit(ch)) x=x*10+ch-‘0‘, ch=getchar();
	return x*f;
}
struct node{int x, y, k, type, q;} q[maxn*4];
bool cmp(node a, node b){return a.k<b.k || (a.k==b.k && a.q<b.q);}
int n, m, ans[maxn*4], Key[maxn*4], Size[maxn*4], tot;

inline void Add(int x, int k){while (x<=n) s(x)+=k, x+=lowbit(x);}
inline int Query(int x){int now=0; while (x>0) now+=s(x), x-=lowbit(x); return now;}
int main()
{
	n=read(), m=read();
	rep(i, 1, n) q[++tot]=(node){i, 1, k(i)=read(), 0, tot};
	char ch[5]; rep(i, 1, m)
	{
		scanf("%s", ch); int x=read(), y=read();
		if (ch[0]==‘C‘) q[++tot]=(node){x, -1, k(x), 0, tot}, q[++tot]=(node){x, 1, k(x)=y, 0, tot};
		else q[++tot]=(node){x, y, read(), 1, tot};
	}
	rep(i, 1, tot) ans[i]=-1;
	sort(q+1, q+1+tot, cmp);
	int s=1; rep(t, 1, tot)
	{
		if (q[t].k==q[t+1].k) continue;
		clr(Size, 0);
		rep(i, s, t)
			if (!q[i].type) Add(q[i].x, q[i].y); else ans[q[i].q]=Query(q[i].y)-Query(q[i].x-1);
		s=t+1;
	}
	rep(i, 1, tot) if (ans[i]!=-1) printf("%d\n", ans[i]);
}
时间: 2024-11-23 09:55:31

HUST-1407 郁闷的小J的相关文章

山东省选 郁闷的小J

小J是国家图书馆的一位图书管理员,他的工作是管理一个巨大的书架.虽然他很能吃苦耐劳,但是由于这个书架十分巨大,所以他的工作效率总是很低,以致他面临着被解雇的危险,这也正是他所郁闷的. 具体说来,书架由N个书位组成,编号从1到N.每个书位放着一本书,每本书有一个特定的编码. 小J的工作有两类: 图书馆经常购置新书,而书架任意时刻都是满的,所以只得将某位置的书拿掉并换成新购的书. 小J需要回答顾客的查询,顾客会询问某一段连续的书位中某一特定编码的书有多少本. 例如,共5个书位,开始时书位上的书编码为

HUST 1407(数据结构)

1407 - 郁闷的小J 小J是国家图书馆的一位图书管理员,他的工作是管理一个巨大的书架.虽然他很能吃苦耐劳,但是由于这个书架十分巨大,所以他的工作效率总是很低,以致他面临着被解雇的危险,这也正是他所郁闷的. 具体说来,书架由N个书位组成,编号从1到N.每个书位放着一本书,每本书有一个特定的编码. 小J的工作有两类: 图书馆经常购置新书,而书架任意时刻都是满的,所以只得将某位置的书拿掉并换成新购的书. 小J需要回答顾客的查询,顾客会询问某一段连续的书位中某一特定编码的书有多少本. 例如,共5个书

[BZOJ 3531] [Sdoi2014] 旅行 【离线+LCT】

题目链接:BZOJ - 3531 题目分析 题目询问一条路径上的信息时,每次询问有某种特定的文化的点. 每个点的文化就相当于一种颜色,每次询问一条路径上某种颜色的点的信息. 可以使用离线算法, 类似于“郁闷的小 J ” 那道题目.将各种操作和询问按照颜色为第一关键字,时间为第二关键字排序. 那么修改颜色的操作就相当于在原颜色中是删点,在新颜色中是加点. 处理完一种颜色的操作后,要将这个颜色的点都做一次删除操作,这样,对于处理下一种颜色,树就又是空的了. 这种题,思考的时候有点晕,写代码的时候非常

响应微博小秘书倡议 连夜加急撸出头像变灰小工具之开发历程

昨天看到了微博小秘书关于全国性悼念活动倡议,我非常支持这个倡议. 因为修改灰色头像会有一定技术门槛,于是思考能否开发一个小工具方便大家使用. 考虑到第二天就是哀悼日,准备夜间快速开发上线. 0X00 废话少说先上东西 有兴趣的老哥可以访问:http://smartding.top:81/ 或者 http://smartding.top:8080/ 因为暂时无法备案,所以只能采用带端口或者纯 IP 的方式访问,有点郁闷. 小工具里面记录了项目历程,有兴趣可以阅读, 0X01 选型 因为时间相当有限

idea小问题解决方法系列

1)有些java文件上显示“红色小j”,如图所示 ,意思是“不可编译”,原因是Module未导入或者没有标记Module下"Sources"一栏src文件夹为Sources.(https://www.zhihu.com/question/37151750).

二维数组的应用,小实例,

<!DOCTYPE  HTML><html> <head>        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />        <title>流程控制语句</title>        <script type="text/javascript">         

我的EJB学习历程

http://blog.csdn.net/sinapaper/archive/2004/06/28/28659.aspx http://blog.csdn.net/sinapaper/archive/2004/06/29/29634.aspx http://blog.csdn.net/sinapaper/archive/2004/06/30/30538.aspx http://blog.csdn.net/sinapaper/archive/2004/07/01/31231.aspx http:/

[hihoCoder#1381]Little Y&#39;s Tree

[hihoCoder#1381]Little Y's Tree 试题描述 小Y有一棵n个节点的树,每条边都有正的边权. 小J有q个询问,每次小J会删掉这个树中的k条边,这棵树被分成k+1个连通块.小J想知道每个连通块中最远点对距离的和. 这里的询问是互相独立的,即每次都是在小Y的原树上进行操作. 输入 第一行一个整数n,接下来n-1行每行三个整数u,v,w,其中第i行表示第i条边边权为wi,连接了ui,vi两点. 接下来一行一个整数q,表示有q组询问. 对于每组询问,第一行一个正整数k,接下来一

编程练习-循环判断(重点是将一个数组的内容给另一个数组)

题目:有一组学生数据,找出其中所有是大一的女生的的名字 学生信息如下: ('小A','女',21,'大一'),  ('小B','男',23,'大三'),  ('小C','男',24,'大四'),  ('小D','女',21,'大一'),  ('小E','女',22,'大四'),  ('小F','男',21,'大一'), ('小G','女',22,'大二'),  ('小H','女',20,'大三'),  ('小I','女',20,'大一'),  ('小J','男',20,'大三') 方法一: <s