1303: [CQOI2009]中位数图
早起一AC,整天萌萌哒。
Problem: 1303
User: forgot93
Language: C++
Result: Accepted
Time:56 ms
Memory:2108 kb
****************************************************************/
#include <cstdio>
const int MAXN = 111111;
int a[MAXN], h[MAXN << 1];
int main() {
int n, b;
scanf("%d%d", &n, &b);
int k;
for (int i = 1;i <= n; ++i) {
scanf("%d", &a[i]);
if (a[i]==b) k=i;
}
for (int i=k,t=0;i<=n;i++){
if (a[i]>b) t++;
else if (a[i]<b) t--;
h[t+MAXN]++;
}
int ans=h[MAXN];
for (int i=k-1,t=0;i>=1;i--)
{
if (a[i]>b) t++;
else t--;
ans+=h[MAXN-t];
}
printf("%d\n",ans);
return 0;
}
分析:1:先确定B的位置k,
2:统计k-n中大于B的数,小于B的数,
3:从K-1到1枚举,大于B,t++,小于B,t--;当K前面的T与K后面的T相等是就是一个结果。
输出
随性Code
浙公网安备 33010602011771号