传送门

线段树菜题。

题意:有一些卡牌,正反各有一个数,你可以任意翻转,每次操作会将两张卡牌的位置调换,你需要在每次操作后回答以现在的卡牌顺序能否通过反转形成一个单调不降的序列。


思路:

对于一个线段树节点[l,r][l,r][l,r]维护两个值mn[0/1]mn[0/1]mn[0/1]表示第lll张牌为正/反面朝上的时候如果这个区间单调不减第rrr个数最小值是多少,如果不合法就赋为infinfinf,然后按照根节点的mnmnmn判断即可。

代码:

#include<bits/stdc++.h>
#define ri register int
#define lc (p<<1)
#define rc (p<<1|1)
#define mid (T[p].l+T[p].r>>1)
using namespace std;
inline int read(){
	int ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
const int N=2e5+5,inf=0x3f3f3f3f;
struct Node{int l,r,mn[2];}T[N<<2];
int n,a[N][2];
inline void pushup(int p){
	T[p].mn[0]=T[p].mn[1]=inf;
	if(T[lc].mn[0]<=a[mid+1][0])T[p].mn[0]=min(T[p].mn[0],T[rc].mn[0]);
	if(T[lc].mn[0]<=a[mid+1][1])T[p].mn[0]=min(T[p].mn[0],T[rc].mn[1]);
	if(T[lc].mn[1]<=a[mid+1][0])T[p].mn[1]=min(T[p].mn[1],T[rc].mn[0]);
	if(T[lc].mn[1]<=a[mid+1][1])T[p].mn[1]=min(T[p].mn[1],T[rc].mn[1]);
}
inline void build(int p,int l,int r){
	T[p].l=l,T[p].r=r;
	if(l==r){T[p].mn[0]=a[l][0],T[p].mn[1]=a[l][1];return;}
	build(lc,l,mid),build(rc,mid+1,r),pushup(p);
}
inline void update(int p,int k){
	if(T[p].l==T[p].r){T[p].mn[0]=a[T[p].l][0],T[p].mn[1]=a[T[p].l][1];return;}
	k<=mid?update(lc,k):update(rc,k),pushup(p);
}
int main(){
	n=read();
	for(ri i=1;i<=n;++i)a[i][0]=read(),a[i][1]=read();
	build(1,1,n);
	for(ri tt=read(),x,y;tt;--tt){
		x=read(),y=read();
		swap(a[x][0],a[y][0]),swap(a[x][1],a[y][1]);
		update(1,x),update(1,y);
		puts((T[1].mn[0]<inf||T[1].mn[1]<inf)?"TAK":"NIE");
	}
	return 0;
}

2019.01.16 bzoj3526: [Poi2014]Card(线段树)的更多相关文章

  1. BZOJ3526[Poi2014]Card——线段树合并

    题目描述 有n张卡片在桌上一字排开,每张卡片上有两个数,第i张卡片上,正面的数为a[i],反面的数为b[i].现在,有m个熊孩子来破坏你的卡片了!第i个熊孩子会交换c[i]和d[i]两个位置上的卡片. ...

  2. [BZOJ3526][Poi2014]Card 线段树

    链接 题意:有一些卡牌,正反各有一个数,你可以任意翻转,每次操作会将两张卡牌的位置调换,你需要在每次操作后回答以现在的卡牌顺序能否通过反转形成一个单调不降的序列 题解 线段树上维护 \(f[o][0/ ...

  3. 【BZOJ3526】[Poi2014]Card 线段树

    [BZOJ3526][Poi2014]Card Description 有n张卡片在桌上一字排开,每张卡片上有两个数,第i张卡片上,正面的数为a[i],反面的数为b[i].现在,有m个熊孩子来破坏你的 ...

  4. 【bzoj3526】[Poi2014]Card 线段树区间合并

    题目描述 有n张卡片在桌上一字排开,每张卡片上有两个数,第i张卡片上,正面的数为a[i],反面的数为b[i].现在,有m个熊孩子来破坏你的卡片了!第i个熊孩子会交换c[i]和d[i]两个位置上的卡片. ...

  5. 2019.01.19 bzoj5457: 城市(线段树合并)

    传送门 线段树合并菜题. 题意简述:给一棵树,每个节点有bib_ibi​个aia_iai​民族的人,问对于每棵子树,子树中哪个民族的人最多,有多少人. 思路: 直接上线段树合并,边合并边维护答案即可. ...

  6. bzoj3526[Poi2014]Card*

    bzoj3526[Poi2014]Card 题意: 有n张卡片在桌上一字排开,每张卡片上有两个数,第i张卡片上,正面的数为a[i],反面的数为b[i].有m个操作,第i个操作会交换c[i]和d[i]两 ...

  7. BZOJ3526 [Poi2014]Card 【线段树】

    题目链接 BZOJ3526 题解 思来想去,发现很显然可以用线段树维护 每个区间保存所有合法方案的左右端点[当左端点一定是,右端点当然存最小的那个就行了] 这么整的数,\(\frac{1}{1000} ...

  8. 2019.01.16 bzoj4399: 魔法少女LJJ(线段树合并)

    传送门 线段树合并菜题(然而findfindfind函数写错位置调了好久) 支持的操作题目写的很清楚了,然后有一个神奇的限制c≤7c\le7c≤7要注意到不然会去想毒瘤线段树的做法. 思路: 这题只有 ...

  9. 2019.01.19 codeforces343D.Water Tree(树剖+ODT)

    传送门 ODTODTODT板子题. 支持子树01覆盖,路径01覆盖,询问一个点的值. 思路:当然可以用树剖+线段树,不过树剖+ODTODTODT也可以很好的水过去. 注意修改路径时每次跳重链都要修改. ...

随机推荐

  1. Aladdin and the Flying Carpet

    Aladdin and the Flying Carpet https://cn.vjudge.net/contest/288520#problem/C It's said that Aladdin ...

  2. HandlerMapping和HandlerAdapter配置须知

    ---------------------siwuxie095                                 HandlerMapping 和 HandlerAdapter 配置须知 ...

  3. 安装vCenter server 6.0

    注意,5.5的还可以直接把iso里的ova直接导入为模板,6.0之后的要拉到Windows下安装. 总路线 ESXI是服务器系统,用vsphere client连接,在client里新建一个虚拟机为W ...

  4. JSP跳转到指定位置

    通常情况下用如下写法即可 onclick='window.location.hash = "某元素的id";' 但我的元素是动态生成的,直接生成代码附带多个单引号和双引号,js语言 ...

  5. Java_10 继承

    1 继承的好处 继承的出现提高了代码的复用性,提高软件开发效率. 继承的出现让类与类之间产生了关系,提供了多态的前提. 2 继承的注意事项 在Java中,类只支持单继承,不允许多继承,也就是说一个类只 ...

  6. Linux系统挂载只读改成读写

    1.mount命令可用于查看哪个模块输入只读,一般显示为: [root@localhost ~]# mount /dev/cciss/c0d0p2 on / type ext3 (rw) proc o ...

  7. kalman滤波(一)---对各参数的理解

    一.引言 1.卡尔曼滤波中的真实值,测量值,预测值,估计值怎么区分?他的5条公式是其核心内容,结合现代的计算机,其实卡尔曼的程序相当的简单,只要你理解了他的那5条公式. 用一个简单的小例子:假设我们要 ...

  8. linux 压缩命令

    .zip格式压缩 zip 压缩文件名 源文件     压缩文件 zip -r 压缩文件名 源目录    #压缩目录 .zip格式解压缩 unzip 压缩文件     #解压缩 .gz格式压缩 gzip ...

  9. PAT 1061 判断题(15)(代码)

    1061 判断题(15 分) 判断题的评判很简单,本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分. 输入格式: 输入在第一行给出两个不超过 100 的正整数 N 和 M,分别是学生人数 ...

  10. PAT 1028 人口普查(20)(STL-set+思路+测试点分析)

    1028 人口普查(20)(20 分) 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超 ...