BZOJ1303(CQOI2009)[中位数图]--奇技淫巧
2017-11-27 21:14
281 查看
【链接】
bzoj1303
【解题报告】
因为题目说了是1~n的排列且长度是奇数。所以只需要统计大于中位数的数等于小于中位数的数且包含中位数的区间个数。开个数组统计一下就行了。
bzoj1303
【解题报告】
因为题目说了是1~n的排列且长度是奇数。所以只需要统计大于中位数的数等于小于中位数的数且包含中位数的区间个数。开个数组统计一下就行了。
#include<cstdio> #include<cstring> #define LL long long using namespace std; const int maxn=200005,tt=100000; int n,m,where,num[maxn],sum[maxn]; LL ans; inline char nc() { static char buf[100000],*l,*r; if (l==r) r=(l=buf)+fread(buf,1,100000,stdin); if (l==r) return EOF; return *l++; } inline int Read() { int res=0,f=1; char ch=nc(),cc=ch; while (ch<'0'||ch>'9') cc=ch,ch=nc(); if (cc=='-') f=-1; while (ch>='0'&&ch<='9') res=res*10+ch-48,ch=nc(); return res*f; } int main() { freopen("1303.in","r",stdin); freopen("1303.out","w",stdout); n=Read(); m=Read(); sum[0]=where=ans=0; memset(num,0,sizeof(num)); num[tt]++; for (int i=1; i<=n; i++) { int x=Read(),p=0; if (x>m) p=1; if (x<m) p=-1; if (x==m) where=i; sum[i]=sum[i-1]+p; if (!where) num[sum[i]+tt]++; } for (int i=where; i<=n; i++) ans+=num[sum[i]+tt]; printf("%lld",ans); return 0; }
相关文章推荐
- BZOJ 1303: [CQOI2009]中位数图 计数,思维
- bzoj千题计划175:bzoj1303: [CQOI2009]中位数图
- [BZOJ 1303] CQOI 2009 中位数图 · 数学
- BZOJ 1303 [CQOI2009]中位数图
- BZOJ1303 [CQOI2009]中位数图 【乱搞】
- bzoj 1303: [CQOI2009]中位数图 数学
- BZOJ1303[CQOI2009]中位数图
- BZOJ1303 [CQOI2009]中位数图 【乱搞】
- BZOJ1303 [CQOI2009]中位数图
- [BZOJ1303][CQOI2009]中位数图
- BZOJ 1303: [CQOI2009]中位数图【前缀和】
- BZOJ 1303: [CQOI2009]中位数图 4000
- bzoj 1303: [CQOI2009]中位数图
- BZOJ1303 [CQOI2009]中位数图 差分+前缀和
- bzoj 1303: [CQOI2009]中位数图
- BZOJ 1303 - [CQOI2009]中位数图 (技巧)
- 【BZOJ】1303 [CQOI2009]中位数图 建模
- [BZOJ1303][CQOI2009]中位数图
- BZOJ 1303: [CQOI2009]中位数图
- 【BZOJ 1303】 【CQOI2009】中位数图