Codeforces 323C Two permutations
题目描述
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:
- 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.
- Introduce function f(z)=((z-1+x)\ mod\ n)+1f(z)=((z−1+x) mod n)+1 .
- 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.
输入输出样例
3
3 1 2
3 2 1
1
1 2 3 3
1
4
4 3 2 1
2 3 4 1
3
1 2 3 4
1 3 2 1
1 4 2 3
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的更多相关文章
- Codeforces 1089I - Interval-Free Permutations(析合树计数)
Codeforces 题面传送门 & 洛谷题面传送门 首先题目中涉及排列的 interval,因此可以想到析合树.由于本蒟蒻太菜了以至于没有听过这种神仙黑科技,因此简单介绍一下这种数据结构:我 ...
- codeforces Gargari and Permutations(DAG+BFS)
/* 题意:求出多个全排列的lcs! 思路:因为是全排列,所以每一行的每一个数字都不会重复,所以如果有每一个全排列的数字 i 都在数字 j的前面,那么i, j建立一条有向边! 最后用bfs遍历整个图, ...
- Codeforces 382 D Permutations
题目大意: 给出一张二分图,这张二分图完美匹配的个数是奇数,求删掉第$i(1<=i<=m)$条边后完美匹配个数的奇偶性. 设这张图的邻接矩阵为$A$,那么完美匹配的个数为$A$的积和式,即 ...
- CodeForces - 296A-Yaroslav and Permutations(思维)
Yaroslav has an array that consists of n integers. In one second Yaroslav can swap two neighboring a ...
- Codeforces Round #485 (Div. 2) E. Petr and Permutations
Codeforces Round #485 (Div. 2) E. Petr and Permutations 题目连接: http://codeforces.com/contest/987/prob ...
- Codeforces 285 E. Positions in Permutations
\(>Codeforces \space 285 E. Positions in Permutations<\) 题目大意 : 定义一个长度为 \(n\) 的排列中第 \(i\) 个元素是 ...
- 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 ...
- 贪心 CodeForces 124B Permutations
题目传送门 /* 贪心:全排列函数使用,更新最值 */ #include <cstdio> #include <algorithm> #include <cstring& ...
- Codeforces Round #337 Alphabet Permutations
E. Alphabet Permutations time limit per test: 1 second memory limit per test: 512 megabytes input: ...
随机推荐
- 继承Thread类使用多线程
java实现多线程有两种方式,一种是继承Thread类,另外一种就是实现Runnable接口. 两种实现方法的优缺点: 使用Thread类实现多线程局限性就是不支持多继承,因为java是不支持类多继承 ...
- CMD命令简介
cmd是command的缩写.即命令行 . 虽然随着计算机产业的发展,Windows 操作系统的应用越来越广泛,DOS 面临着被淘汰的命运,但是因为它运行安全.稳定,有的用户还在使用,所以一般Wind ...
- 一次失败的刷题经历:[LeetCode]292之尼姆游戏(Nim Game)
最近闲来无事刷LeetCode,发现这道题的Accept Rate还是挺高的,尝试着做了一下,结果悲剧了,把过程写下来,希望能长点记性.该题的描述翻译成中文如下: 你正在和你的朋友玩尼姆游戏(Nim ...
- ogre3D学习基础19 --- 材质的继承,纹理的滚动与旋转
以上一节为基础,废话不多说. 首先新增一个节点,用于比较显示 //新增一个节点 ent = mSceneMgr->createEntity("Quad"); ent-> ...
- CSU-1974 神奇药水
CSU-1974 神奇药水 Description 对于csuxushu来说,能够在CSU(California State University)组织2017年的ACM暑期集训让他感到十分荣幸. ...
- python 笔试总结
1.对比两种函数对应结果 def fn(x): if x>0: print(x) fn(x-1) ****结果****** 3 2 1 $$$$$$另外一种$$$$$$$$$ def fn(x) ...
- 利用python爬取58同城简历数据
利用python爬取58同城简历数据 利用python爬取58同城简历数据 最近接到一个工作,需要获取58同城上面的简历信息(http://gz.58.com/qzyewu/).最开始想到是用pyth ...
- idea中将项目与github关联
© 版权声明:本文为博主原创文章,转载请注明出处 1.在github中创建一个账号:https://github.com/join?source=header-home 2.下载并安装git:http ...
- poj2002 hash+邻接表优化Squares
Squares Time Limit: 3500MS Memory Limit: 65536K Total Submissions: 17487 Accepted: 6643 Descript ...
- Mysql实战之数据备份
author:JevonWei 版权声明:原创作品 blog:http://119.23.52.191/ --- 数据备份和恢复 mysqldump 冷备份单库(不会创建新库,需要手动创建并指定导入数 ...