Description

一闪一闪亮晶晶/好像你的身体/藏在众多孤星之中/还是找得到你/挂在天上放光明/反射我的孤寂/提醒我/我也只是一颗寂寞的星星/oh~/浩瀚的世界里/更迭的人海里/和你互相辉映/而我们连续/连接所有思念/唱一首歌给你/给你

Zyh在浩瀚的宇宙中发现了一个神奇的星系。这个星系上很可能有文明的痕迹,因为它的星球的连接方式非常特别。
具体的来说整个星系由若干个小星系组成,这若干个小星系是由若干个星球组成的。星系由n个小星系组成,这n个小星系在这里可以抽象成一个小圆。小星系编号1~n首尾相接形成一个大圆。若将第i个小星系放大,那么看到的就是Ci个星球。这些星球也是首尾相接形成了一个大圆。特别地,每个小星系中有两个星球x,y,分别成为起始星球和结束星球。在整个星系大圆的构成中实际上是由上一个小星系的结束星球连接着下一个小星系的起始星球。如果嫌弃语文拿B的Zyh说的不清楚可以看下面的图。

其中用黄绿色细线画的圈是一个个小星系,其中是有若干个星球,红色是起始星球,蓝色是结束星球。
然而星球之间的通信是一个问题。Zyh认为,星球会有两个状态,允许通行和禁止通行。星球的编号即使是在不同的小星系中也是两两不同的,如果是第I个小星系的第J个星球,那么编号应该是[sigma(1<=i

Input

首先是一个正整数n表示小星系的个数,然后是n行。每行的开始是Ci表示这个小星系的星球个数。接着是Ci+2个数字,分别是S[1] …… S[Ci] x y。S[j]表示第i个小星系的第j个星球的通行状态。0表示禁止通行,1表示允许通行。x和y表示这个小星系的第x第y个分别是起始和结束星球。
然后是一个正整数m,表示操作和询问总数。接下来是m行。如果是操作那么是这样的形式给出:1 x,表示将编号为x的星球状态置反。如果是询问:2 x y,表示询问星球x和y能不能互相到达。如果可以输出Yes,否则输出No。

Output

对于每个询问输出对应的答案。

Sample Input

4
3 1 1 0 2 1
2 1 0 2 1
3 0 1 0 1 3
4 0 0 1 1 2 4
12
2 1 2
2 1 4
1 5
2 1 11
1 6
1 7
1 8
2 2 8
1 6
2 2 8
1 10
2 2 8

Sample Output

Yes
No
Yes
Yes
No
Yes

Data Constraint

对于30%的数据 sigma Ci<=1000 , n<=100 , m<=10000
另有10%的数据 Ci<=500000,n=1 , m<=500000
对于100%的数据 sigmaCi<=500000 , n<=10000 , m<=500000 , Ci>1 , x!=y无论是询问还是起始结束星球

题解

先考虑单个环的情况,不考虑大的那个特殊环。
只要判断x到y的路径上面是否全部是1即可。
在单独一个环里面,从x到y(x < y)的路径有两种,
1、x->y
2、y->n->1->x
只有这两种情况。

再考虑在大的特殊环的情况
假设查询第xx环中的第x号点和第yy环中个第y号点,
参照上面,情况同样只有两种
1、x->stxxst_{xx},y->fiyyfi_{yy},大环xx-1 -> yy+1
2、x->fixxfi_{xx},y->styyst_{yy},大环xx+1 -> yy-1
如果两个点同在一个小环里面,就还有特殊判断一下。

对于修改操作,就先对小环的进行修改,
然后判断修改过后小环的通过性是否被改变,决定是否需要修改大环上面的信息。

维护区间和可以用线段树,或者用树状数组(推荐使用,更好打)。

code

#include<queue>
#include<cstdio>
#include<iostream>
#include<algorithm>
#include <cstring>
#include <string.h>
#include <cmath>
#include <math.h>
#include <time.h>
#define ll long long
#define N 500003
#define M 10003
#define db double
#define P putchar
#define G getchar
#define inf 998244353
using namespace std;
char ch;
void read(int &n)
{n=0;ch=G();while((ch<'0' || ch>'9') && ch!='-')ch=G();ll w=1;if(ch=='-')w=-1,ch=G();while('0'<=ch && ch<='9')n=(n<<3)+(n<<1)+ch-'0',ch=G();n*=w;
}int max(int a,int b){return a>b?a:b;}
int min(int a,int b){return a<b?a:b;}
ll abs(ll x){return x<0?-x:x;}
ll sqr(ll x){return x*x;}
void write(ll x){if(x>9) write(x/10);P(x%10+'0');}int t[3][4*N],st[N],fi[N];
int n,m,Q,cz,x,y,s[M],xx,yy;
bool it[N+M],ans,old,ne,all[N];int x_(int x){return x&(-x);}void ins(int x,int y,int z)
{int m=(y==1?s[n]:n);for(int i=x;i<=m;i+=x_(i))t[y][i]+=z;
}int get(int x,int y)
{int s=0;for(int i=x;i;i-=x_(i))s+=t[y][i];return s;
}int find(int x,int l,int r)
{return get(r,x)-get(l-1,x);
}bool que(int cnt,int x,int y)
{if(x>y)swap(x,y);if(find(1,x,y)==y-x+1)return 1;if(find(1,s[cnt-1]+1,x)==x-s[cnt-1] && find(1,y,s[cnt])==s[cnt]-y+1)return 1;return 0;
}bool que_(int x,int y)
{if(x>y)swap(x,y);if(find(2,x,y)==y-x+1)return 1;if(find(2,1,x)==x && find(2,y,n)==n-y+1)return 1;return 0;
}int main()
{read(n);for(int i=1;i<=n;i++){read(m);s[i]=s[i-1];for(int j=1;j<=m;j++)read(x),it[++s[i]]=x;read(st[i]);read(fi[i]);}for(int i=1;i<=s[n];i++)if(it[i])ins(i,1,1);for(int i=1;i<=n;i++)if(que(i,st[i]+s[i-1],fi[i]+s[i-1]))ins(i,2,1),all[i]=1;read(Q);while(Q--){read(cz);if(cz==1){read(x);xx=lower_bound(s+1,s+1+n,x)-s;old=que(xx,st[xx]+s[xx-1],fi[xx]+s[xx-1]);ins(x,1,it[x]?-1:1);it[x]=1-it[x];ne=que(xx,st[xx]+s[xx-1],fi[xx]+s[xx-1]);if(old!=ne){ins(xx,2,all[xx]?-1:1);all[xx]=1-all[xx];}}else{read(x);read(y);if(x>y)swap(x,y);xx=lower_bound(s+1,s+1+n,x)-s;yy=lower_bound(s+1,s+1+n,y)-s;ans=que(xx,st[xx]+s[xx-1],x) &&que(yy,fi[yy]+s[yy-1],y) &&((xx!=1?xx-1:n)==yy || que_(xx!=1?xx-1:n,yy!=n?yy+1:1));ans|=que(xx,x,fi[xx]+s[xx-1]) &&que(yy,y,st[yy]+s[yy-1]) &&((xx!=n?xx+1:1)==yy || que_(xx!=n?xx+1:1,yy!=1?yy-1:n));if(xx==yy)ans|=que(xx,x,y);if(ans)P('Y'),P('e'),P('s');else P('N'),P('o');P('\n');}}return 0;
}

JZOJ3815. 【NOIP2014模拟9.7】克卜勒相关推荐

  1. jzoj2702. 探险jzoj3917. 【NOIP2014模拟11.2A组】福慧双修

    Description 探险家小T好高兴!X国要举办一次溶洞探险比赛,获奖者将得到丰厚奖品哦!小T虽然对奖品不感兴趣,但是这个大振名声的机会当然不能错过! 比赛即将开始,工作人员说明了这次比赛的规则: ...

  2. JZOJ 3815. 【NOIP2014模拟9.7】克卜勒

    Description 一闪一闪亮晶晶/好像你的身体/藏在众多孤星之中/还是找得到你/挂在天上放光明/反射我的孤寂/提醒我/我也只是一颗寂寞的星星/oh~/浩瀚的世界里/更迭的人海里/和你互相辉映/而 ...

  3. JZOJ 3809. 【NOIP2014模拟8.25】设备塔

    Description 为了封印辉之环,古代塞姆利亚大陆的人民在异空间中建造了一座设备塔. 简单的说,这座设备塔是一个漂浮在异空间中的圆柱体,圆柱体两头的圆是计算核心,而侧面则是 传输信息所用的数据通 ...

  4. 2016.7.15 NOIP2014模拟试题解题报告(又名:方克顺和他的正余弦朋友们(

    我发现自从我开始写博客以后OI成绩上升很明显啊orzzz,继续保持继续保持(然而昨晚上开夜车到十二点,感觉这次没发挥好)(下次没考好就尴尬了)(所以一定要考好!),嗯这次考得还是很不错的,也深入思考了 ...

  5. 3917 【NOIP2014模拟11.2A组】福慧双修 (Standard IO)题解

    目录 目录 原题 Description Input Output Sample Input Sample Output Data Constraint 题解 40分 100分 模型转换 做法 I I ...

  6. JZOJ 3775. 【NOIP2014模拟8.15】因子的排列

    Description 一天,小B学习了分解质因数的相关内容.他发现,一个数的质因子可以有许多不同的排列方式,例如20=2*2*5=2*5*2=5*2*2,那么小B认为20的质因子有3种不同的排列方式 ...

  7. JZOJ 3899. 【NOIP2014模拟】逻辑的连通性

    Description 假如有命题p 一定能推出命题q,则称p 是q 的充分条件,q 是p 的必要条件. 特别的,当p 既是q 的充分条件,又是q 的必要条件时,称p 和q 互为充要条件 现在有n 个 ...

  8. JZOJ 3731. 【NOIP2014模拟7.10】庐州月

    Description [引子] 桥上的恋人入对出双 桥边红药叹夜太漫长 月也摇晃人也彷徨 乌蓬里传来了一曲离殇 庐州月光洒在心上 月下的你不复当年模样 太多的伤难诉衷肠 叹一句当时只道是寻常 庐州月 ...

  9. JZOJ 3885. 【长郡NOIP2014模拟10.22】搞笑的代码

    Description 在OI界存在着一位传奇选手--QQ,他总是以风格迥异的搞笑代码受世人围观 某次某道题目的输入是一个排列,他使用了以下伪代码来生成数据 while 序列长度< n do { ...

最新文章

  1. hibnate 创建表的时候type=innodb报错
  2. 大型网站架构之JAVA中间件
  3. oracle空值判断 =,Oracle,sql server的空值(null)判断
  4. python中的字体英文名_对python opencv 添加文字 cv2.putText 的各参数介绍
  5. 自定义协同程序:CustomYieldInstruction
  6. magento添加面包屑
  7. leetcode练习--字符串中第一个唯一字符
  8. 数据分析工具urule
  9. C语言编程练习---2021山东理工大学ACM 实验一J---X题解
  10. treap【来自蒟蒻的整理】
  11. Win7系统安装详细教程步骤
  12. python iter( )函数
  13. 两个非常不错的在线pdf转epub的网站,没有上传大小限制
  14. 约瑟夫问题和又遇约瑟夫问题
  15. centos7.2安装dcos
  16. 批判性思维如何养成?
  17. OpenStack+Ceph集群 虚机实例扩容
  18. POJO、PO、BO、DTO、VO的含义以及应用场景
  19. AlphaFold2代码阅读(九)
  20. 沙盒勇者服务器维护,沙盒勇者攻略大全 沙盒勇者通关攻略

热门文章

  1. 实用EXECL高级技能之考勤数据合并
  2. 豆瓣排行250电影数据爬取
  3. SuperMap支持的国产化环境
  4. 扩容战争(上):内困与革命
  5. 企业微信点餐系统读后感
  6. 国内AR技术领头羊十二居对ARKit充满期望!
  7. android三星曲面屏适配,三星S6 Edge侧边联系人(曲面屏幕适配软件)
  8. 计算机毕业设计ssm古诗词知识学习系统q5697系统+程序+源码+lw+远程部署
  9. 教您电脑电源短接哪两根线风扇转
  10. Android学习笔记 75. 单元测试