zoukankan      html  css  js  c++  java
  • 水题:[USACO17JAN]Balanced Photo平衡的照片

    权值BIT || 线段树

    写一下主要是注意下别把边界打错了qwq

    #include<cstdio>
    #include<queue>
    #include<algorithm>
    #include<iostream>
    #include<cstring> 
    #include<vector>
    #define maxn 500006
    #define max MAX
    using namespace std;
    inline int MAX(int a,int b){return a>b?a:b;}
    struct hzw {int id,num,real;}t[maxn];
    inline bool cmp (hzw a,hzw b) {return a.real<b.real;}
    inline bool cmp2(hzw a,hzw b) {return a.id<b.id;}
    int lnum[maxn],rnum[maxn],lc[maxn],rc[maxn],sum[maxn],tot,n;
    inline void build(int s,int l,int r)
    {
    	if (l==r) return;
    	int mid =(l+r)>>1;
    	lc[s]=++tot;
    	build(tot,l,mid);
    	rc[s]=++tot;
    	build(tot,mid+1,r);
    }
    inline void update(int s,int l,int r,int v)
    {
    	
    	if (l==v&&r==v) {sum[s]++;return;}
    	int mid=(l+r)>>1;
    	if (v<=mid) update(lc[s],l,mid,v);
    	else update(rc[s],mid+1,r,v);
    	sum[s]=sum[lc[s]]+sum[rc[s]];
    }
    inline int query(int s,int l,int r,int cl,int cr)
    {
    	if (l==cl&&r==cr)
    	{
    		return sum[s];
    	}
    	int mid=(l+r)>>1;
    	if (cr<=mid)     return query(lc[s],l,mid,cl,cr);
    	else if (cl>mid) return query(rc[s],mid+1,r,cl,cr);
    	else {
    		return query(lc[s],l,mid,cl,mid)+query(rc[s],mid+1,r,mid+1,cr);
    	}
    }
    int main()
    {
    	cin>>n;
    	tot=1;
    	int ans=0;
    	for (int i=1;i<=n;++i) 
    	{
    	 	scanf("%d",&t[i].real);
    	 	t[i].id=i;
    	}
    	sort(t+1,t+1+n,cmp);
    	t[1].num=1;
    	build(1,1,n);
    	for (int i=2;i<=n;++i) t[i].num= t[i].real==t[i-1].real?t[i-1].num:t[i-1].num+1;
    	sort(t+1,t+1+n,cmp2);
    	for (int i=1;i<=n;++i) {lnum[i]=query(1,1,n,t[i].num,n);update(1,1,n,t[i].num);}
    	memset(sum,0,sizeof(sum));
    	for (int i=n;i>=1;i--) {rnum[i]=query(1,1,n,t[i].num,n);update(1,1,n,t[i].num);}
    	for (int i=1;i<=n;++i) {int tmp1=max(lnum[i],rnum[i]),tmp2=min(lnum[i],rnum[i]);if (tmp1>2*tmp2) ans++;}
    	cout<<ans;
    	return 0;
    }
    
  • 相关阅读:
    228. Summary Ranges
    227. Basic Calculator II
    224. Basic Calculator
    222. Count Complete Tree Nodes
    223. Rectangle Area
    221. Maximal Square
    220. Contains Duplicate III
    219. Contains Duplicate II
    217. Contains Duplicate
    Java编程思想 4th 第4章 控制执行流程
  • 原文地址:https://www.cnblogs.com/bullshit/p/9892181.html
Copyright © 2011-2022 走看看