题目描述

You are given two permutations pp and qq , consisting of nn elements, and mm queries of the form: l_{1},r_{1},l_{2},r_{2}l1​,r1​,l2​,r2​ $ (l_{1}<=r_{1}; l_{2}<=r_{2}) $ . The response for the query is the number of such integers from 11 to nn , that their position in the first permutation is in segment [l_{1},r_{1}][l1​,r1​] (borders included), and position in the second permutation is in segment [l_{2},r_{2}][l2​,r2​](borders included too).

A permutation of nn elements is the sequence of nn distinct integers, each not less than 11 and not greater than nn .

Position of number vv (1<=v<=n)(1<=v<=n) in permutation g_{1},g_{2},...,g_{n}g1​,g2​,...,gn​ is such number ii , that g_{i}=vgi​=v .

输入输出格式

输入格式:

The first line contains one integer n\ (1<=n<=10^{6})n (1<=n<=106) , the number of elements in both permutations. The following line contains nn integers, separated with spaces: p_{1},p_{2},...,p_{n}\ (1<=p_{i}<=n)p1​,p2​,...,pn​ (1<=pi​<=n) . These are elements of the first permutation. The next line contains the second permutation q_{1},q_{2},...,q_{n}q1​,q2​,...,qn​ in same format.

The following line contains an integer m\ (1<=m<=2·10^{5})m (1<=m<=2⋅105) , that is the number of queries.

The following mm lines contain descriptions of queries one in a line. The description of the ii -th query consists of four integers: a,b,c,d\ (1<=a,b,c,d<=n)a,b,c,d (1<=a,b,c,d<=n) . Query parameters l_{1},r_{1},l_{2},r_{2}l1​,r1​,l2​,r2​ are obtained from the numbers a,b,c,da,b,c,dusing the following algorithm:

  1. Introduce variable xx . If it is the first query, then the variable equals 00 , else it equals the response for the previous query plus one.
  2. Introduce function f(z)=((z-1+x)\ mod\ n)+1f(z)=((z−1+x) mod n)+1 .
  3. Suppose l_{1}=min(f(a),f(b)),r_{1}=max(f(a),f(b)),l_{2}=min(f(c),f(d)),r_{2}=max(f(c),f(d))l1​=min(f(a),f(b)),r1​=max(f(a),f(b)),l2​=min(f(c),f(d)),r2​=max(f(c),f(d)) .

输出格式:

Print a response for each query in a separate line.

输入输出样例

输入样例#1:

3
3 1 2
3 2 1
1
1 2 3 3
输出样例#1:

1
输入样例#2:

4
4 3 2 1
2 3 4 1
3
1 2 3 4
1 3 2 1
1 4 2 3
输出样例#2:

1
1
2 把第二个排列的数在第一个排列中对应的位置记一下,主席树跑一跑就行了。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<cstring>
#define ll long long
#define maxn 1000005
using namespace std;
struct node{
node *lc,*rc;
int s;
}nil[maxn*30],*rot[maxn],*cnt;
int a[maxn],n,ky,num[maxn];
int m,le,ri,k,preans=-1,ple,pri;
char ch; inline int add(int x,int y,const int ha){
return (x+y)%ha;
} node *update(node *u,int l,int r){
node *ret=++cnt;
*ret=*u;
ret->s++; if(l==r) return ret; int mid=l+r>>1;
if(le<=mid) ret->lc=update(ret->lc,l,mid);
else ret->rc=update(ret->rc,mid+1,r); return ret;
} int query(node *u,node *v,int l,int r){
if(l>=le&&r<=ri) return v->s-u->s; int mid=l+r>>1,an=0;
if(le<=mid) an+=query(u->lc,v->lc,l,mid);
if(ri>mid) an+=query(u->rc,v->rc,mid+1,r);
return an;
} inline void prework(){
cnt=rot[0]=nil->lc=nil->rc=nil;
nil->s=0; for(int i=1;i<=n;i++){
le=a[i];
rot[i]=update(rot[i-1],1,n);
}
} inline void solve(){
scanf("%d",&m);
while(m--){
scanf("%d%d%d%d",&le,&ri,&ple,&pri); le=add(le,preans,n)+1;
ri=add(ri,preans,n)+1;
ple=add(ple,preans,n)+1;
pri=add(pri,preans,n)+1;
if(le>ri) swap(le,ri);
if(ple>pri) swap(ple,pri); preans=query(rot[ple-1],rot[pri],1,n);
printf("%d\n",preans);
}
} int main(){
scanf("%d",&n);
int now;
for(int i=1;i<=n;i++){
scanf("%d",&now);
num[now]=i;
}
for(int i=1;i<=n;i++){
scanf("%d",&now);
a[i]=num[now];
} prework();
solve(); return 0;
}

  


Codeforces 323C Two permutations的更多相关文章

  1. Codeforces 1089I - Interval-Free Permutations(析合树计数)

    Codeforces 题面传送门 & 洛谷题面传送门 首先题目中涉及排列的 interval,因此可以想到析合树.由于本蒟蒻太菜了以至于没有听过这种神仙黑科技,因此简单介绍一下这种数据结构:我 ...

  2. codeforces Gargari and Permutations(DAG+BFS)

    /* 题意:求出多个全排列的lcs! 思路:因为是全排列,所以每一行的每一个数字都不会重复,所以如果有每一个全排列的数字 i 都在数字 j的前面,那么i, j建立一条有向边! 最后用bfs遍历整个图, ...

  3. Codeforces 382 D Permutations

    题目大意: 给出一张二分图,这张二分图完美匹配的个数是奇数,求删掉第$i(1<=i<=m)$条边后完美匹配个数的奇偶性. 设这张图的邻接矩阵为$A$,那么完美匹配的个数为$A$的积和式,即 ...

  4. CodeForces - 296A-Yaroslav and Permutations(思维)

    Yaroslav has an array that consists of n integers. In one second Yaroslav can swap two neighboring a ...

  5. Codeforces Round #485 (Div. 2) E. Petr and Permutations

    Codeforces Round #485 (Div. 2) E. Petr and Permutations 题目连接: http://codeforces.com/contest/987/prob ...

  6. Codeforces 285 E. Positions in Permutations

    \(>Codeforces \space 285 E. Positions in Permutations<\) 题目大意 : 定义一个长度为 \(n\) 的排列中第 \(i\) 个元素是 ...

  7. Codeforces Round #198 (Div. 2) E. Iahub and Permutations —— 容斥原理

    题目链接:http://codeforces.com/contest/340/problem/E E. Iahub and Permutations time limit per test 1 sec ...

  8. 贪心 CodeForces 124B Permutations

    题目传送门 /* 贪心:全排列函数使用,更新最值 */ #include <cstdio> #include <algorithm> #include <cstring& ...

  9. Codeforces Round #337 Alphabet Permutations

    E. Alphabet Permutations time limit per test:  1 second memory limit per test:  512 megabytes input: ...

随机推荐

  1. android/libs/libammsdk.jar" already exists! 解决方法

    Error: Uh oh!"/work/2016/fengkongbao/.meteor/local/cordova-build/platforms/android/libs/libamms ...

  2. day20 Django Models 操作,多表,多对多

    1 Django models 获取数据的三种方式: 实践: viwes def business(request): v1 = models.Business.objects.all() v2 = ...

  3. Flask With

  4. idea使用maven逆向mybitis的文件

    引用自 http://blog.csdn.net/for_my_life/article/details/51228098 本文介绍一下用Maven工具如何生成Mybatis的代码及映射的文件. 一. ...

  5. C#知识点<4>

    1\C# 运算符重载 您可以重定义或重载 C# 中内置的运算符.因此,程序员也可以使用用户自定义类型的运算符.重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的. ...

  6. iis特殊后缀文件下载404

    项目中有特殊类型的文件上传到服务器,下载的时候报404,下载不下来.如后缀名为qwwq这种类型. 因为遇到过这种情况,以前都是配置mime类型好的,但是这次没有找到,到底应该配置什么mime类型,一时 ...

  7. Ubuntu系统设置中心不见了

    sudo apt-get install unity-control-center 执行安装上述即可 原因是因为在安装搜狗输入法的时候卸载了ibuts与系统控制中心

  8. 【bzoj3007】拯救小云公主 二分+对偶图+并查集

    题目描述 英雄又即将踏上拯救公主的道路…… 这次的拯救目标是——爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意识到自己还是等 ...

  9. Codeforces 1063D Candies for Children

    题目大意 给定整数 $n, k, l, r$,$1\le n, k \le 10^{11}$,$1\le l, r \le n$ . 令 $ m = r - l + 1$,若 $m \le 0$,$m ...

  10. HDFS设计思想

    HDFS设计思想 DataNode:用来在磁盘上存储数据 HDFS  数据存储单元( block ) 1 文件被切分成固定大小的数据block块 •默认数据块大小为 64MB(hadoop1.x版本6 ...