[COGS2580]偏序 II

题目大意:

\(n(n\le50000)\)个五元组,求五维偏序。

思路:

CDQ分治套CDQ分治套CDQ分治套树状数组。

时间复杂度\(\mathcal O(n\log^4 n)\)。

源代码:

#include<cstdio>
#include<cctype>
#include<algorithm>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
typedef long long int64;
const int N=50001;
int n;
int64 ans;
struct Node {
int a,b,c,d,t1,t2;
};
Node a[N];
inline bool cmp1(const Node &p1,const Node &p2) {
return p1.a<p2.a;
}
inline bool cmp2(const Node &p1,const Node &p2) {
return p1.b<p2.b;
}
inline bool cmp3(const Node &p1,const Node &p2) {
return p1.c<p2.c;
}
class FenwickTree {
private:
int val[N];
int lowbit(const int &x) const {
return x&-x;
}
public:
void modify(int p,const int &x) {
for(;p<=n;p+=lowbit(p)) val[p]+=x;
}
int query(int p) const {
int ret=0;
for(;p;p-=lowbit(p)) ret+=val[p];
return ret;
}
};
FenwickTree t;
void cdq3(const int &b,const int &e) {
if(b==e) return;
const int mid=(b+e)>>1;
cdq3(b,mid);
cdq3(mid+1,e);
int p=b,q=mid+1;
for(;q<=e;q++) {
if(a[q].t1==1||a[q].t2==1) continue;
for(;p<=mid&&a[p].c<a[q].c;p++) {
if(a[p].t1==1&&a[p].t2==1) {
t.modify(a[p].d,1);
}
}
ans+=t.query(a[q].d);
}
while(--p>=b) {
if(a[p].t1==1&&a[p].t2==1) {
t.modify(a[p].d,-1);
}
}
std::inplace_merge(&a[b],&a[mid]+1,&a[e]+1,cmp3);
}
void cdq2(const int &b,const int &e) {
if(b==e) return;
const int mid=(b+e)>>1;
cdq2(b,mid);
cdq2(mid+1,e);
for(register int i=b;i<=mid;i++) a[i].t2=1;
for(register int i=mid+1;i<=e;i++) a[i].t2=2;
std::inplace_merge(&a[b],&a[mid]+1,&a[e]+1,cmp2);
cdq3(b,e);
std::sort(&a[b],&a[e]+1,cmp2);
}
void cdq1(const int &b,const int &e) {
if(b==e) return;
const int mid=(b+e)>>1;
cdq1(b,mid);
cdq1(mid+1,e);
for(register int i=b;i<=mid;i++) a[i].t1=1;
for(register int i=mid+1;i<=e;i++) a[i].t1=2;
std::inplace_merge(&a[b],&a[mid]+1,&a[e]+1,cmp1);
cdq2(b,e);
std::sort(&a[b],&a[e]+1,cmp1);
}
int main() {
freopen("partial_order_two.in","r",stdin);
freopen("partial_order_two.out","w",stdout);
n=getint();
for(register int i=1;i<=n;i++) a[i].a=getint();
for(register int i=1;i<=n;i++) a[i].b=getint();
for(register int i=1;i<=n;i++) a[i].c=getint();
for(register int i=1;i<=n;i++) a[i].d=getint();
cdq1(1,n);
printf("%lld\n",ans);
return 0;
}

[COGS2580]偏序 II的更多相关文章

  1. [HZOI2016]偏序&[HZOI2015]偏序II K维偏序问题

    description Cogs: [HZOI2016]偏序 [HZOI2015]偏序 II data range \[ n\le 5\times 10^4\] solution 嵌套\(CDQ\)的 ...

  2. COGS 2580. [HZOI 2015]偏序 II

    COGS 2580. [HZOI 2015]偏序 II 题目传送门 题目大意:给n个元素,每个元素有具有4个属性a,b,c,d,求i<j并且ai<aj,bi<bj,ci<cj, ...

  3. 【CJOJ2375】 【HZOI 2015】偏序 II(cdq分治,树状数组)

    传送门 CJOJ Solution 具体实现参考上一篇Blog(四维偏序) 代码实现1(cdq+cdq+cdq+BIT) /* mail: mleautomaton@foxmail.com autho ...

  4. 几道很Interesting的偏序问题

    若干道偏序问题(STL,分块) 找了4道题目 BZOJ陌上花开(权限题,提供洛谷链接) Cogs2479偏序 Cogs2580偏序II Cogs2639偏序++ 作为一个正常人,肯定先看三维偏序 做法 ...

  5. CDQ分治嵌套模板:多维偏序问题

    CDQ分治2 CDQ套CDQ:四维偏序问题 题目来源:COGS 2479 偏序 #define LEFT 0 #define RIGHT 1 struct Node{int a,b,c,d,bg;}; ...

  6. $CDQ$分治总结

    A.\(CDQ\) 分治 特别基础的教程略. \(CDQ\)分治的优缺点: ( 1 )优点:代码量少,常数极小,可以降低处理维数. ( 2 )缺点:必须离线处理. \(CDQ\)分治与其他分治最本质的 ...

  7. poj2352树状数组解决偏序问题

    树状数组解决这种偏序问题是很厉害的! /* 输入按照y递增,对于第i颗星星,它的level就是之前出现过的星星中,横坐标小于i的总数 */ #include<iostream> #incl ...

  8. bzoj3262: 陌上花开 三维偏序cdq分治

    三维偏序裸题,cdq分治时,左侧的x一定比右侧x小,然后分别按y排序,对于左侧元素按y大小把z依次插入到树状数组里,其中维护每个左侧元素对右侧元素的贡献,在bit查询即可 /************* ...

  9. 【算法学习】【洛谷】cdq分治 & P3810 三维偏序

    cdq是何许人也?请参看这篇:https://wenku.baidu.com/view/3b913556fd0a79563d1e7245.html. 在这篇论文中,cdq提出了对修改/询问型问题(Mo ...

随机推荐

  1. springboot集成mybatis环境搭建以及实现快速开发微服务商品模块基本的增删改查!

    之前学习了springboot和mybatis3的一些新特性,初步体会了springboot的强大(真的好快,,,,,),最近趁着复习,参考着以前学习的教程,动手写了一个springboot实战的小例 ...

  2. Centos7安装FTP突然无法登录

    vi /etc/pam.d/vsftpd //注释掉auth required pam_shells.so session optional pam_keyinit.so force revokeau ...

  3. MySQL修改datadir目录

    更改MySQL的数据目录由/usr/local/mysql/data/更换至/data/mysql/ 第一种方法修改my.cnf 1)关闭MySQL [root@test2 ~]# service m ...

  4. CAS和AQS

    一.CAS CAS(Compare And Swap),即比较并交换.是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS操作包含三个操作数——内存位置(V).预期原值(A)和新值(B).如果内 ...

  5. DevExpress GridControl 的数据绑定

    本人不才啊,折腾2个多小时才把数据绑定好.现在把折腾过程记录一下来以帮助更多的朋友,自己也温习一下. 直接上代码了哈.... WPF哈 xaml文件 <dxg:GridControl Name= ...

  6. PHP计算字符串的长度

    <?php /** * 计算字符串的长度(汉字按照两个字符计算) * * @param string $str 字符串 * * @return int */ function str_len($ ...

  7. Python 常用的内建函数

    内建函数 ​ Build-in Function,启动python解释器,输入dir(__builtins__), 可以看到很多python解释器启动后默认加载的属性和函数,这些函数称之为内建函数, ...

  8. fsevents npm install是报错

    npm install 安装插件的时候,fsevents报错,这是node 8.x版本的问题,解决办法,把node 版本切换到6.x

  9. java基础79 会话管理(Cookie技术、Session技术)

    1.概念     会话管理:管理浏览器和服务器之间会话过程中产生的会话数据.    Cookie技术:会话数据保存到浏览器客户端.[存 编号/标记(id)]    Session技术:会话技术会保存到 ...

  10. ThinkPHP小知识点

    ThinkPHP模版中时间戳转换为时间 {$vo.data|date='Y-m-d',###} thinkphp字符截取函数msubstr() ThinkPHP有一个内置字符截取函数mb_substr ...