首页 > 其他分享 >做题记录整理树状数组2 P48 [SDOI2009] HH的项链(2022/9/19)

做题记录整理树状数组2 P48 [SDOI2009] HH的项链(2022/9/19)

时间:2022-09-19 22:22:54浏览次数:117  
标签:cnt qr nex 19 插入 HH 2022 for1

P48 [SDOI2009] HH的项链

一眼莫队

然而莫队就只有32分

莫队毕竟是O(n根号n)的,肯定过不了

我们思考一个区间[l,r],我们发现,如果从r开始往l数,那么每种数字只有最右边的那个才有意义,如:

1 1 4 5 1 4

[1,5]很明显对于1来说,只有在4这个下标的1才有意义

所以我们可以先求出每个数第一个从右往左数和他一样的数

然后对于询问进行排序(离线),然后每次按照顺序进行插入就ok了
如上面那个例子

插入(1,1)

删除(1,1)
插入(2,1)

插入(3,1)

插入(4,1)

删除(2,1)
插入(5,1)

回答 求和(1,5)-求和(1,1-1)

#include<bits/stdc++.h>
#define for1(i,a,b) for(int i = a;i<=b;i++)
#define ll long long
using namespace std;
int z[5000005],s[5000005];
int nex[5000005];
int cnt;
int n,m;
struct node{
	int l;
	int r;
	int ans;
	int id;
}a[5000005];

bool cmp(node x,node y)
{
	return x.r<y.r;
}
bool cmp2(node x,node y)
{
	return x.id<y.id;
}
int lb(int x)
{
	return x&-x;
}

void xg(int x,int k)
{
	while(x<=n)
	{
		s[x]+=k;
		x+=lb(x);
	}
}

int qh(int y)
{
	int ans=0;
	while(y)
	{
		ans+=s[y];
		y-=lb(y);
	}
	return ans;
}
int main()
{
	scanf("%d",&n);
	for1(i,1,n) scanf("%d",&z[i]);
	cin>>m;
	for1(i,1,m)
	scanf("%d%d",&a[i].l,&a[i].r),a[i].id=i;
	sort(a+1,a+m+1,cmp);
	cnt=1;
	for1(i,1,m)
	{
		int qr=a[i].r;
		for1(j,cnt,qr)
		{
			if(nex[z[j]])
				xg(nex[z[j]],-1);
			xg(j,1);
			nex[z[j]]=j;
		}
		cnt=qr+1;
		a[i].ans=qh(a[i].r)-qh(a[i].l-1);
	}
	sort(a+1,a+m+1,cmp2);
	for1(i,1,m)
	{
		printf("%d\n",a[i].ans);
	}
	return 0;
}

标签:cnt,qr,nex,19,插入,HH,2022,for1
From: https://www.cnblogs.com/yyx525jia/p/16709318.html

相关文章

  • 9.19
    Java中的一场处理方式(机制)有哪些?try-catch在异常可能出现处获取异常并处理异常。throw,throws抛出异常,会逐层抛出到方法的调用者处Error和Exception的区别是什么?Er......
  • CSP-J 2022 备战 乱七八糟字符串
     众所周知,字符串分为两大类:一.string类:主要操作:1.字符串长度输出:str.length()2.字符串比较:str1.compare(str2)如果结果是0则两个字符串完全相同3.字符串判空:str.em......
  • 2022icpc网络赛(I)
    目录A(预处理)C(结论/签到)D(打表)F(min25筛)G(dp+状态优化)H(模拟/签到)J(构造)K(dp+状态优化)L(dp)A(预处理)容易发现对于一段被0隔开的长度为\(n\)的连续的1,可以消去的0的个数为\(\lceil\f......
  • CMU15-445 FALL 2022 PROJECT #1 - BUFFER POOL
    CMU15-445PROJECT#1-BUFFERPOOL前言终于来到了Project#1了,这次是要实现三个组件,分别是ExtendibleHashTable,LRU-KReplacementPolicy,BufferPoolManage......
  • CSP2022游记
    本来不想说出题人不好的。但刚好抽到英语课课前演讲,主题是我最讨厌的人。没办法只好委屈出题人了ThetopicofmyspeechtodayisthepersonIhatethemost.Thepers......
  • 2022-09-19 hbuilder x编译uni项目卡在编译中
    嗯。。。en..............网友云:重装hbx,使用管理员运行。我没重装,重启了一下电脑,然后使用管理员运行,然并卵。我是这么个情况:wepy转uniapp,然后装完依赖后(没报错)就想运行......
  • ROS通信 9.19 话题通信+服务器参数
    ROS通信服务通信服务通信也是ROS中一种极其常用的通信模式,服务通信是基于请求响应模式的,是一种应答机制。也即:一个节点A向另一个节点B发送请求,B接收处理请求并产生响......
  • 9.19面试题
    说说你对MVC的理解?MVC是什么?是一种设计模式,为了解决以往JSP的繁琐开发M(model)V(view)C(controller),其中view处理页面显示,contrller是用来处理用户的交互与事件,mdoel定义实......
  • Codeforces Round #819 D
    D.EdgeSplitn+2条边并且连通图就证明最多多3条边我们可以想到的是要是连成了环的话不如拆一条边给其他颜色所以我们一定要无环我们先跑一遍最小生成树确定成红色......
  • 把秒数转化成时间格式(12小时制)比如输入:3612 , 输出为 AM 01:00:12 比如输入:75612 , 输
    #include<stdio.h> main() {   inta;   scanf("%d",&a);   if(a<43199)   {     inth;   h=a/3600;   intm;   m=(a%3600)/60;......