社区讨论
性感猫娘在线求调~
CF1418G Three Occurrences参与者 4已保存回复 12
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 11 条
- 当前快照
- 1 份
- 快照标识符
- @m1dlcj3c
- 此快照首次捕获于
- 2024/09/22 21:05 去年
- 此快照最后确认于
- 2024/09/22 21:23 去年
RT,感谢喵~qwq
CPP#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#define ull unsigned long long
#define rd read()
#define mkp make_pair
#define psb push_back
#define Elaina 0
#define mst(a,b) memset((a),(b),sizeof(a))
#define random(a,b) (1ll*rand()*rand()*rand()%((b)-(a)+1)+(a))
inline ll read(){
ll f=1,x=0;
char ch=getchar();
for(;!isdigit(ch);ch=getchar()) f=(ch=='-'?-1:1);
for(;isdigit(ch);ch=getchar()) x=(x<<3)+(x<<1)+ch-'0';
return f*x;
}
const int mod=1e9+7;
const int N=1e6+100;
const int inf=0x7fffffff;
int n,k;
int max(int a,int b){
return a>b?a:b;
}
mt19937_64 rnd(time(0));
ull code[N],pre[N],a[N],bkt[N];
map<ull,ull> mp;
ull xork(ull x,ull y,int k){
ull sum=0,p=1;
while(x||y){
sum+=(x%k+y%k)%k*p;
p*=k;
x/=k;
y/=k;
}
return sum;
}
signed main(){
srand(time(0));
n=rd,k=3;
for(int i=1;i<=n;i++){
a[i]=rd;
}
for(int i=1;i<=N;i++){
code[i]=rnd();
}
for(int i=1;i<=n;i++){
pre[i]=xork(pre[i-1],code[a[i]],k);
// cout<<pre[i]<<endl;
}
int cnt=0;
mp[0]=1;
for(int l=0,r=1;r<=n;++r){
++bkt[a[r]];
while(bkt[a[r]]>3){
--bkt[a[l]];
if(l>0) --mp[pre[l-1]];
++l;
}
cnt+=mp[pre[r]];
// cout<<cnt<<endl;
++mp[pre[r]];
}
printf("%lld",cnt);
return Elaina;
}
回复
共 12 条回复,欢迎继续交流。
正在加载回复...