QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#380644 | #8050. Random Permutation | pope# | TL | 0ms | 0kb | C++14 | 1.9kb | 2024-04-07 07:36:08 | 2024-04-07 07:36:09 |
answer
#include <bits/stdc++.h>
using namespace std;
#define rep(i, a, b) for(int i = a; i < (b); i++)
#define all(x) begin(x),end(x)
#define sz(x) (int)(x).size()
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
#define trav(a, x) for (auto& a: x)
#define f first
#define s second
#define pb push_back
const char nl = '\n';
#ifdef DBG
void dbg_out() { cerr << nl; }
template <typename Head, typename... Tail>
void dbg_out(Head H, Tail... T) {
cerr << ' ' << H;
dbg_out(T...);
}
#define dbg(...) dbg_out(__VA_ARGS__)
#else
#define dbg(...)
#endif
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
int main() {
cin.tie(0)->sync_with_stdio(0);
cin.exceptions(cin.failbit);
int n;
// cin >> n;
n = (int)3e5;
vector<int> a(n);
srand(40);
for(int i = 0; i<n; i++){
// cin >> a[i];
a[i] = i;
}
random_shuffle(a.begin(),a.end());
vector<int> sums(3*n);
int shift = n;
ll ans = 0LL;
for(int i = 0; i<n; i++){
int val = max(n/2-a[i],a[i]-n/2);
val = max(val,1);
int wid = (int)min((ll)n,7LL*(ll)n*(ll)n/val/val);
int sum = 0;
int l = max(0,i-wid);
int r = min(n-1,i+wid);
ll cur = 0LL;
for(int j = i; j>=l; j--){
if(j < i){
sum += ((a[j]>a[i])?1:-1);
}
sums[sum+shift]++;
}
sum = 0;
for(int j = i; j<=r; j++){
if(j>i){
sum += ((a[j]>a[i])?1:-1);
}
cur += sums[shift-sum];
cur += sums[shift-sum+1];
}
sum = 0;
for(int j = i; j>=l; j--){
if(j < i){
sum += ((a[j]>a[i])?1:-1);
}
sums[sum+shift] = 0;
}
ans += cur*a[i];
}
cout << ans << endl;
}
详细
Test #1:
score: 0
Time Limit Exceeded
input:
4 1 4 2 3