QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#822737 | #8050. Random Permutation | EBeason# | WA | 1427ms | 4928kb | C++14 | 1.1kb | 2024-12-20 16:06:57 | 2024-12-20 16:06:58 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize(1, 2, 3, "Ofast", "inline")
int n;
int a[300300];
long long ans=0;
//unordered_map<int,int> l;
struct likemap {
int ma[300300];
int& operator [] (int x) {
return ma[x+100000];
}
}l;
long long upperdiv(long long a,long long b) {
return (a+b-1)/b;
}
void solve(int x) {
// l.clear();
// int mxl=12*sqrt(upperdiv(1ll*a[x]*(n-a[x]),1ll*n))+600;
int mxl=2000;
// cout<<mxl<<'?'<<endl;
l[0]=1;
for(int i=x-1,tmp=0;i>=1 && (x-i)<=mxl;--i) {
if(a[i]<a[x]) --tmp;
else ++tmp;
l[tmp]=l[tmp]+1;
}
ans+=1ll*l[0]*a[x]+1ll*l[1]*a[x];
for(int i=x+1,tmp=0;i<=n && (i-x)<=mxl;++i) {
if(a[i]<a[x]) --tmp;
else ++tmp;
ans+=1ll*l[-tmp]*a[x]+1ll*l[-tmp+1]*a[x];
}
l[0]=0;
for(int i=x-1,tmp=0;i>=1 && (x-i)<=mxl;--i) {
if(a[i]<a[x]) --tmp;
else ++tmp;
l[tmp]=0;
}
}
int main() {
// scanf("%d",&n);
n=300000;
for(int i=1;i<=n;++i) {
// scanf("%d",&a[i]);
a[i]=i;
}
// random_shuffle(a+1,a+n+1);
for(int i=1;i<=n;++i) {
solve(i);
// if(i%10000==0) cout<<i<<endl;
}
printf("%lld\n",ans);
return 0;
}
/*
4
1 4 2 3
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 1427ms
memory: 4928kb
input:
4 1 4 2 3
output:
178844998149000
result:
wrong answer 1st numbers differ - expected: '22', found: '178844998149000'