社区讨论
求调CF1418G
学术版参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mi9lwmp8
- 此快照首次捕获于
- 2025/11/22 09:24 3 个月前
- 此快照最后确认于
- 2025/11/22 11:05 3 个月前
WA on 38
迫使我改得和题解差不多一样了还是过不去。
CPP#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mpr make_pair
#define ld double
#define sdn cout
#define vi vector<int>
#define ull unsigned long long
#define fi first
#define se second
#define pii pair<int,int>
mt19937 rnd(time(0));
const int N = 5e5 + 10,M = 1e6 + 10,INF1 = 1e9 + 7;
const ll INF2 = 1e18 + 7,MOD = 998244353;
const ull base = 131;
ll n,m,k,q,T,rt,a[N],cnt[N];
ll ans,rd[N];
__int128 h[N];
map<__int128,ll> mp;
int main(){
ios::sync_with_stdio(0),cin.tie(0);
cin>>n;
for(int i = 1;i <= n;i ++) rd[i] = rnd()%INF2+1;
for(int i = 1;i <= n;i ++){
cin>>a[i];h[i] = h[i-1];
h[i] -= cnt[a[i]]*rd[a[i]];
cnt[a[i]] = (cnt[a[i]]+1)%3;
h[i] += cnt[a[i]]*rd[a[i]];
}
int l = 0;
mp[0] = 1;
for(int i = 0;i <= n;i ++) cnt[i] = 0;
for(int r = 1;r <= n;r ++){
cnt[a[r]] ++;
while(cnt[a[r]] > 3){
cnt[a[l]] --;
if(l) mp[h[l-1]] --;
l ++;
}
ans += mp[h[r]];
mp[h[r]] ++;
}
sdn<<ans<<endl;
return 0;
}
实在想不出哪的问题
回复
共 0 条回复,欢迎继续交流。
正在加载回复...