社区讨论
卡常玄关
学术版参与者 4已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mhj96dgx
- 此快照首次捕获于
- 2025/11/03 22:46 4 个月前
- 此快照最后确认于
- 2025/11/03 22:46 4 个月前
校内模拟赛的题,和HH的项链一样,但时限只给了 1s,用的可持久化最后一个点过不去
CPP#include<bits/stdc++.h>
#define il inline
#define rg register
using namespace std;
namespace FastIO
{
const int BUFFER_SIZE=1<<20;
char input[BUFFER_SIZE],output[BUFFER_SIZE];
int input_pos=0,input_len=0,output_pos=0;
il void read_buffer()
{
input_len=fread(input,1,BUFFER_SIZE,stdin);
input_pos=0;
}
il char get_char()
{
if(input_pos>=input_len)read_buffer();
return input[input_pos++];
}
il int read_int()
{
char c=get_char();
while(c<=' ')
{
c=get_char();
}
int x=0;
while(c>='0'&&c<='9')
{
x=x*10+c-'0';
c=get_char();
}
return x;
}
il void write_int(int x)
{
if(x<0)
{
output[output_pos++]='-';
x=-x;
}
char buffer[12];
int len=0;
do
{
buffer[len++]='0'+x%10;
x/=10;
}while(x);
while(len--)
{
output[output_pos++]=buffer[len];
}
output[output_pos++]='\n';
if(output_pos>=BUFFER_SIZE-20)
{
fwrite(output,1,output_pos,stdout);
output_pos=0;
}
}
il void flush()
{
if(output_pos>0)
{
fwrite(output,1,output_pos,stdout);
output_pos=0;
}
}
}
using FastIO::read_int;
using FastIO::write_int;
const int N=1e6+1;
struct Segment_Tree
{
int sum,ls,rs;
}tree[N*40];
int root[N],cnt,lst[N];
il void update(rg int &id,rg int l,rg int r,rg int p,rg int sum)
{
tree[++cnt]=tree[id];
tree[cnt].sum+=sum;
id=cnt;
if(l==r)return;
int mid=l+r>>1;
if(p<=mid)update(tree[id].ls,l,mid,p,sum);
else update(tree[id].rs,mid+1,r,p,sum);
}
il int query(rg int id,rg int l,rg int r,rg int p)
{
if(r<p)return 0;
if(l>=p)return tree[id].sum;
int mid=l+r>>1,res=0;
if(p<=mid)res=query(tree[id].ls,l,mid,p);
res+=query(tree[id].rs,mid+1,r,p);
return res;
}
signed main()
{
rg int n=read_int(),Q;
for(rg int i=1,x;i<=n;i++)
{
x=read_int();
root[i]=root[i-1];
if(lst[x])update(root[i],1,n,lst[x],-1);
update(root[i],1,n,i,1);
lst[x]=i;
}
Q=read_int();
while(Q--)
{
rg int l=read_int(),r=read_int();
write_int(query(root[r],1,n,l));
}
FastIO::flush();
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...