[USACO17FEB]Why Did the Cow Cross the Road III P

考虑我们对每种颜色记录这样一个信息 \((x,y,z)\),即左边出现的位置,右边出现的位置,该颜色。

于是统计的是\(x < x_2,y > y_2,|z - z2| > k\)的数对数量。

因为\(CDQ\)分治的过程是,第一维事先排序,第二维递归进行,第三维用数据结构统计,所以

上述这个数量是很好处理的。

// Problem: P3658 [USACO17FEB]Why Did the Cow Cross the Road III P
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P3658
// Memory Limit: 125 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org) #include<iostream>
#include<cstdio>
#include<map>
#include<algorithm>
#define ll long long
#define N 1000010 ll n,k,ans; ll to[N]; struct P{
int x,y,z;
}a[N],b[N]; bool operator < (P aa,P bb){
return aa.x == bb.x ? ((aa.y == bb.y) ? (aa.z < bb.z) : aa.y > bb.y) : aa.x < bb.x;
} ll t[N]; #define lowbit(x) (x & -x) inline void add(int x,int u){
for(int i = x;i <= n;i += lowbit(i))
t[i] += u;
} inline ll q(int x){
x = std::max(x,0);
x = std::min(n,(ll)x);
ll ans = 0;
for(int i = x;i;i -= lowbit(i))
ans += t[i];
return ans;
} //_________BIT #define mid ((l + r) >> 1) inline void change(int l,int r){
if(l == r)return;
int i = l,j = mid + 1,p = l - 1;
while(i <= mid && j <= r){if(a[i].y > a[j].y)b[++p] = a[i++];else b[++p] = a[j++];}
while(i <= mid)b[++p] = a[i++];
while(j <= r)b[++p] = a[j++];
for(int k = l;k <= r;++k)
a[k] = b[k];
} inline void solve(int l,int r){
if(l == r)return ;
solve(l,mid);solve(mid + 1,r);change(l,mid);change(mid + 1,r);
int i = l,j = mid + 1;
while(j <= r){
while(i <= mid && a[i].y > a[j].y)add(a[i++].z,1);
ans = ans + (ll)q(a[j].z - k - 1) + (ll)q(n) - (ll)q(a[j].z + k);
++j;
}
for(int k = l;k < i;++k)
add(a[k].z,-1);
} //————————————————————cdq
int main(){
scanf("%lld%lld",&n,&k);
for(int i = 1;i <= n;++i){
ll x;
scanf("%lld",&x);
to[x] = i;
}
for(int i = 1;i <= n;++i){
ll x;
scanf("%lld",&x);
a[i].x = to[x],a[i].y = i,a[i].z = x;
}
std::sort(a + 1,a + n + 1);
solve(1,n);
std::cout<<ans<<std::endl;
return 0;
}

[USACO17FEB]Why Did the Cow Cross the Road III P的更多相关文章

  1. 洛谷 P3663 [USACO17FEB]Why Did the Cow Cross the Road III S

    P3663 [USACO17FEB]Why Did the Cow Cross the Road III S 题目描述 Why did the cow cross the road? Well, on ...

  2. [USACO17FEB]Why Did the Cow Cross the Road III S

    题目描述 Why did the cow cross the road? Well, one reason is that Farmer John's farm simply has a lot of ...

  3. 洛谷 P3660 [USACO17FEB]Why Did the Cow Cross the Road III G(树状数组)

    题目背景 给定长度为2N的序列,1~N各处现过2次,i第一次出现位置记为ai,第二次记为bi,求满足ai<aj<bi<bj的对数 题目描述 The layout of Farmer ...

  4. 【题解】洛谷P3660 [USACO17FEB]Why Did the Cow Cross the Road III

    题目地址 又是一道奶牛题 从左到右扫描,树状数组维护[左端点出现而右端点未出现]的数字的个数.记录每个数字第一次出现的位置. 若是第二次出现,那么删除第一次的影响. #include <cstd ...

  5. P3660 【[USACO17FEB]Why Did the Cow Cross the Road III G】

    题外话:维护区间交集子集的小套路 开两个树状数组,一个维护进入区间,一个维护退出区间 $Query:$ 给定询问区间$l,r$和一些其他区间,求其他区间中与$[l,r]$交集非空的区间个数 用上面维护 ...

  6. [USACO17FEB]Why Did the Cow Cross the Road III P(CDQ分治)

    题意 两列$n$的排列,相同的数连边,如果一对数有交叉且差的绝对值$>k$,则$++ans$,求$ans$ 题解 可以把每一个数字看成一个三元组$(x,y,z)$,其中$x$表示在第一列的位置, ...

  7. [USACO17FEB]Why Did the Cow Cross the Road III G

    嘟嘟嘟 首先看到这种序列的问题,我就想到了逆序对,然后就想如何把这道题转化. 首先要满足这个条件:ai <bi.那么我们把所有数按第一次出现的顺序重新赋值,那么对于新的数列,一定满足了ai &l ...

  8. [USACO17FEB]Why Did the Cow Cross the Road III G (树状数组,排序)

    题目链接 Solution 二维偏序问题. 现将所有点按照左端点排序,如此以来从左至右便满足了 \(a_i<a_j\) . 接下来对于任意一个点 \(j\) ,其之前的所有节点都满足 \(a_i ...

  9. P3660 [USACO17FEB]Why Did the Cow Cross the Road III G

    Link 题意: 给定长度为 \(2N\) 的序列,\(1~N\) 各处现过 \(2\) 次,i第一次出现位置记为\(ai\),第二次记为\(bi\),求满足\(ai<aj<bi<b ...

随机推荐

  1. javascript-jquery的ajax

    用一个例子来说明: html部分  <form action="name1"> <input class="class1" type=&quo ...

  2. FastAPI 学习之路(四十二)定制返回Response

    我们想要在接口中返回xml格式的内容,我们应该如何实现呢. from fastapi import FastAPI,Response @app.get("/legacy/") de ...

  3. Less-(26~28) preg_replace3

    Less-26: 核心语句:  各种回显均存在. 本题相比Less-25,多屏蔽了很多符号: 首先是各种注释符 --+,#,/**/  . /[]/表示字符集合:任何出现在里面的字符均会被替换. 屏蔽 ...

  4. 用例圖學習實例 / Learning Use Case Diagram by Examples

    什麼是用例圖? 用例描述了一個演員和感興趣的系統之間的一系列交互,以達到某種特定目標,並由某種觸發事件引發.用例滿足需求或為演員解決問題.用例圖包含一組用例,可以通過從每個角色的不同角度講述系統將如何 ...

  5. JDK里常见容器总结

    自己总结.   扩容 线程安全   是否支持null 的key 说明 hashmap 2*length 否   是 1.8以后增加红黑树.提高检索效率 hashtable   是   否 官方不建议使 ...

  6. Beta阶段第四次会议

    Beta阶段第四次会议 时间:2020.5.20 完成工作 姓名 工作 难度 完成度 ltx 1.对小程序进行修改2.提出相关api修改要求 轻 85% xyq 1.设计所需api文档2.编写相关技术 ...

  7. BUAA2020软工作业(一)——谈谈我和计算机的缘分

    项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 第一次作业-热身! 我在这个课程的目标是 进一步提高自己的编码能力,工程能力 这个作业在哪个具体方 ...

  8. boost编译中的细节问题

    原文链接 http://www.cppblog.com/Robertxiao/archive/2013/01/06/197022.html 生成文件命名规则:boost中有许多库,有的库需要编译.而有 ...

  9. hdu 1856 More is better(并查集)

    题意: Mr Wang wants some boys to help him with a project. Because the project is rather complex, the m ...

  10. Pycharm的安装简介

    Pycharm 1. Pycharm简介 PyCharm是由JetBrains打造的一款Python IDE,VS2010的重构插件Resharper就是出自JetBrains之手.同时支持Googl ...