您的位置:首页 > 其它

fzu 2019 排列

2012-04-28 22:04 288 查看
wrong了好多吧,注意边界

#include<iostream>
#include<cstring>
#include <cstdio>
#include<string>
#include<queue>
#include<vector>
#include<map>
#include <set>
#include<ctime>
#include<cmath>
#include <cstdlib>
#include<algorithm>
#include <iomanip>
using namespace std;
#define LL __int64
#define N 200100
#define mid 100000
int ar
,dp
,hah
;
int main(){
int T,n,m;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
int id;
for(int i=1;i<=n;i++){
scanf("%d",&ar[i]);
if(m==ar[i]) id=i;
}
memset(dp,0,sizeof(dp));
for(int i=id-1;i>0;i--){
dp[i]=dp[i+1];
if(ar[i]<m) dp[i]++;
}
for(int i=id+1;i<=n;i++){
dp[i]=dp[i-1];
if(ar[i]<m) dp[i]++;
}

int ans=0;

memset(hah,0,sizeof(hah));
int x=((id-1)&1 ? id+1:id);
for(int i=x ;i<=n;i+=2){
hah[ dp[i]-(i-x)/2 +mid]++;
}
for(int i=1;i<=id;i+=2){
ans+=hah[ (x-i)/2-dp[i] +mid];
}

memset(hah,0,sizeof(hah));
x=((id-2)&1 ? id+1:id);
for(int i=x ;i<=n;i+=2) {
hah[ dp[i]-(i-x)/2 +mid]++;
}
for(int i=2;i<=id;i+=2){
ans+=hah[ (x-i)/2-dp[i] + mid];
}
printf("%d\n",ans);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: