传送门
数据结构优化计数菜题。
题意简述:给nnn个点问有多少个www型。
www型的定义:
由5个不同的点组成,满足x1&lt;x2&lt;x3&lt;x4&lt;x5,x3&gt;x1&gt;x2,x3&gt;x5&gt;x4x_1&lt;x_2&lt;x_3&lt;x_4&lt;x_5,x_3&gt;x_1&gt;x_2,x_3&gt;x_5&gt;x_4x1​<x2​<x3​<x4​<x5​,x3​>x1​>x2​,x3​>x5​>x4​


思路:
本蒟蒻的思路很奇葩。
我们把www拆成两个vvv,把vvv按照大小排序之后就只用统计形如213213213和312312312的种类数并累加贡献到222位置上,最后乘法原理。
考虑统计这个东西。
显然1,21,21,2在以333为原点的坐标系的同一象限,于是可以按照yyy拍个序,从下往上加点,对于每个点维护再未插入的点中在该点左/右上方的点有多少个,然后对于一个点的答案就是它左/右下方所有点维护的贡献之和。
第一个东西可以用bitbitbit,然后第二个贡献之和可以上权值线段树。
代码:

#include<bits/stdc++.h>
#define fi first
#define se second
#define ri register int
using namespace std;
inline int read(){int ans=0;char ch=getchar();while(!isdigit(ch))ch=getchar();while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();return ans;
}
const int mod=1e9+7,N=2e5+5;
typedef long long ll;
int n,f[N][2],ans=0,stk[N],top,mp[N],sig=0;
struct Pot{int x,y;}a[N];
inline int add(const int&a,const int&b){return a+b>=mod?a+b-mod:a+b;}
inline int dec(const int&a,const int&b){return a>=b?a-b:a-b+mod;}
inline int mul(const int&a,const int&b){return (ll)a*b%mod;}
inline bool cmp(const Pot&a,const Pot&b){return a.y==b.y?a.x<b.x:a.y<b.y;}
struct Fenwick_Tree{int bit[N];inline int lowbit(const int&x){return x&-x;}inline void update(int x,int v){for(ri i=x;i<=sig;i+=lowbit(i))bit[i]=add(bit[i],v);}inline int query(int x){int ret=0;for(ri i=x;i;i^=lowbit(i))ret=add(ret,bit[i]);return ret;}inline void clear(){fill(bit+1,bit+sig+1,0);for(ri i=1,pos;i<=n;++i){pos=lower_bound(mp+1,mp+sig+1,a[i].x)-mp;update(pos,1);}}
}Bit;
struct segment_tree{#define lc (p<<1)#define rc (p<<1|1)#define mid (l+r>>1)int sum[N<<2],num[N<<2],tag[N<<2];inline void pushup(int p){num[p]=num[lc]+num[rc],sum[p]=sum[lc]+sum[rc];}inline void pushnow(int p,int v){if(!num[p])return;sum[p]+=num[p]*v,tag[p]+=v;}inline void pushdown(int p){if(tag[p])pushnow(lc,tag[p]),pushnow(rc,tag[p]),tag[p]=0;}inline void update(int p,int l,int r,int ql,int qr,int v){if(ql>r||qr<l||!num[p])return;if(ql<=l&&r<=qr)return pushnow(p,v);pushdown(p);if(qr<=mid)update(lc,l,mid,ql,qr,v);else if(ql>mid)update(rc,mid+1,r,ql,qr,v);else update(lc,l,mid,ql,mid,v),update(rc,mid+1,r,mid+1,qr,v);pushup(p);}inline void modify(int p,int l,int r,int k,int v){if(l==r){sum[p]+=v,++num[p];return;}pushdown(p),k<=mid?modify(lc,l,mid,k,v):modify(rc,mid+1,r,k,v),pushup(p);}inline int query(int p,int l,int r,int ql,int qr){if(ql>r||qr<l||!num[p]||!sum[p])return 0;if(ql<=l&&r<=qr)return sum[p];pushdown(p);if(qr<=mid)return query(lc,l,mid,ql,qr);if(ql>mid)return query(rc,mid+1,r,ql,qr);return query(lc,l,mid,ql,mid)+query(rc,mid+1,r,mid+1,qr);}inline void clear(){memset(tag,0,sizeof(tag)),memset(sum,0,sizeof(sum)),memset(num,0,sizeof(num));}
}T;
inline void change1(){for(ri i=1,p,pos;i<=top;++i){pos=lower_bound(mp+1,mp+sig+1,a[p=stk[i]].x)-mp;T.update(1,1,sig,pos+1,sig,-1),Bit.update(pos,-1);}for(ri i=1,p,pos;i<=top;++i){pos=lower_bound(mp+1,mp+sig+1,a[p=stk[i]].x)-mp;f[p][0]=T.query(1,1,sig,1,pos-1);}for(ri i=1,p,pos;i<=top;++i){pos=lower_bound(mp+1,mp+sig+1,a[p=stk[i]].x)-mp;T.modify(1,1,sig,pos,Bit.query(pos-1));}
}
inline void change2(){for(ri i=1,p,pos;i<=top;++i){pos=lower_bound(mp+1,mp+sig+1,a[p=stk[i]].x)-mp;T.update(1,1,sig,1,pos-1,-1),Bit.update(pos,-1);}for(ri i=1,p,pos;i<=top;++i){pos=lower_bound(mp+1,mp+sig+1,a[p=stk[i]].x)-mp;f[p][1]=T.query(1,1,sig,pos+1,sig);}for(ri i=1,p,pos;i<=top;++i){pos=lower_bound(mp+1,mp+sig+1,a[p=stk[i]].x)-mp;T.modify(1,1,sig,pos,Bit.query(sig)-Bit.query(pos));}
}
inline void solve1(){T.clear(),Bit.clear();for(ri i=1;i<=n;++i){stk[top=1]=i;while(i<n&&a[i].y==a[i+1].y)++i,stk[++top]=i;change1();}
}
inline void solve2(){T.clear(),Bit.clear();for(ri i=1;i<=n;++i){stk[top=1]=i;while(i<n&&a[i].y==a[i+1].y)++i,stk[++top]=i;change2();}
}
int main(){n=read();for(ri i=1;i<=n;++i)mp[++sig]=a[i].x=read(),a[i].y=read();sort(a+1,a+n+1,cmp);sort(mp+1,mp+sig+1),sig=unique(mp+1,mp+sig+1)-mp-1;solve1(),solve2();for(ri i=1;i<=n;++i)ans=add(ans,mul(f[i][0],f[i][1]));cout<<ans;return 0;
}

转载于:https://www.cnblogs.com/ldxcaicai/p/10367741.html

2019.01.21 bzoj2441: [中山市选2011]小W的问题(树状数组+权值线段树)相关推荐

  1. 【BZOJ2441】【中山市选2011】小W的问题(树状数组+权值线段树)

    传送门 由于一个www不好统计,我们考虑拆成222个vvv来统计,也就是"312"和"213"这样的 把答案统计在"2"处,两边相乘就是答案 ...

  2. jzoj5986. 【WC2019模拟2019.1.4】立体几何题 (权值线段树)

    传送门 题面 题解 不难看出每个点的大小为行列限制中较小的那一个(因为数据保证有解) 对于行的每个限制,能取到的个数是列里限制大于等于它的数的个数,同理,对于列是行里大于它的个数(这里没有等于,为了避 ...

  3. 动态区间第k小:树状数组套权值线段树

    所谓树状数组套权值线段树,就是在树状树组上套权值线段树 (逃) 解析 如何解决静态区间第k小? 使用主席树就ok啦 辣么如何解决动态区间第k小嘞- 我们想想主席树为啥不能解决动态区间第k小 因为如果改 ...

  4. 【2019浙江省赛 - A】Vertices in the Pocket(权值线段树下二分,图,思维)

    题干: DreamGrid has just found an undirected simple graph with  vertices and no edges (that's to say, ...

  5. 2019牛客多校第七场E Find the median 权值线段树+离散化

    Find the median 题目链接: https://ac.nowcoder.com/acm/contest/887/E 题目描述 Let median of some array be the ...

  6. 2019暑期训练——牛客第七场 C. Governing sand(权值线段树)

    Governing sand 链接: https://ac.nowcoder.com/acm/contest/887/C 题意: 给n种树,其中每一种树都有高度h,每砍掉一棵树所需要的代价c,这种树的 ...

  7. BZOJ 2440: [中山市选2011]完全平方数 [容斥原理 莫比乌斯函数]

    2440: [中山市选2011]完全平方数 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3028  Solved: 1460 [Submit][S ...

  8. [补档][中山市选2011]杀人游戏

    [中山市选2011]杀人游戏 题目 一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面,查出谁是杀手. 警察能够对每一个人进行查证,假如查证的对象是平民,他会告诉警察,他认识 ...

  9. bzoj 2440: [中山市选2011]完全平方数(二分+莫比乌斯函数)

    2440: [中山市选2011]完全平方数 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 4018  Solved: 1952 [Submit][S ...

最新文章

  1. 我是如何在天猫、蚂蚁金服、百度等大厂面试中被拒的 | 掘金技术征文
  2. RTP:实时应用程序传输协议
  3. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(40)-精准在线人数统计实现-【过滤器+Cache】...
  4. 为什么将0.1f改为0会使性能降低10倍?
  5. UIPickerView基本使用
  6. Python异常处理总结
  7. mpp格式文用什么软件打开
  8. python 小说分析_谁还没看过几本金庸小说?用Python分析一下当年最爱看的主角是谁...
  9. 132 个 Web 设计工具(上)
  10. Golang环境变量设置(二)--GOMODULEGOPROXY
  11. java秒表计时器_Java-计时器/秒表GUI
  12. 【详解】面试必问:SpringBoot自动配置原理
  13. c语言如何不用数组排序,c语言实现数组排序.docx
  14. Java基础之《JVM性能调优(14)—CPU性能调优》
  15. 回忆2018年AI入门学习路线
  16. 软件系统测试性迁移,数据库迁移测试——功能测试
  17. 第十章 SQL命令 CREATE PROCEDURE(一)
  18. 摄影爱好者玩编程:利用Python和OpenCV打造专业级长时曝光摄影图
  19. 经常性收入、MRR、ARR 的定义和计算方法
  20. javascript学习-贪吃蛇

热门文章

  1. java户名的正则表达式_java – 用于验证用户名的正则表达式
  2. 【75位联合作者Nature重磅】AI药神:机器学习模型有望提前五年预测白血病!
  3. 用于实现 Web 服务的 SOA 编程模型,第 10 部分: SOA 用户角色
  4. jq fileupload 设置最大文件大小5m_我猜你并不会设置“分辨率”
  5. emacs latex_使用Emacs Org模式轻松创建LaTeX文档
  6. 引入外部机构需要注意的事项_如何与外部营销机构合作
  7. 谈论源码_当我们谈论开放音乐时,我们指的是什么?
  8. 开源的商业意义_为开源项目提供资金具有良好的商业意义
  9. Bootstrap Glyphicons图标
  10. 安装Bootstrap3源码版本