题意

\(n(n \le 200000)\)张卡片,正反有两个数\(a[i], b[i]\)。\(m(m \le 1000000)\)次操作,每次交换\(c[i]、d[i]\)位置上的卡片。每一次操作后输出是否存在一种方案使得正面朝上的数从左到右单调不降。

分析

直接考虑线段树维护。

题解

线段树每个结点记录4个信息\(a[i][j]\),表示左边的\(i\)在这个结点区间能否和右边的\(j\)面满足条件,update的时候更新一下即可。

#include <bits/stdc++.h>
using namespace std;
inline int getint() {
int x=0;
char c=getchar();
for(; c<'0'||c>'9'; c=getchar());
for(; c>='0'&&c<='9'; x=x*10+c-'0', c=getchar());
return x;
}
const int N=200005, Lim=N*3;
int a[N][2], n;
struct node {
node *c[2];
bool g[2][2];
void up(int m) {
static int *l, *r;
static bool f[2][2];
l=a[m], r=a[m+1];
f[0][0]=l[0]<=r[0];
f[0][1]=l[0]<=r[1];
f[1][0]=l[1]<=r[0];
f[1][1]=l[1]<=r[1];
g[0][0]=(c[0]->g[0][0]&&((c[1]->g[0][0]&&f[0][0])||(c[1]->g[1][0]&&f[0][1])))||
(c[0]->g[0][1]&&((c[1]->g[0][0]&&f[1][0])||(c[1]->g[1][0]&&f[1][1])));
g[0][1]=(c[0]->g[0][0]&&((c[1]->g[0][1]&&f[0][0])||(c[1]->g[1][1]&&f[0][1])))||
(c[0]->g[0][1]&&((c[1]->g[0][1]&&f[1][0])||(c[1]->g[1][1]&&f[1][1])));
g[1][0]=(c[0]->g[1][0]&&((c[1]->g[0][0]&&f[0][0])||(c[1]->g[1][0]&&f[0][1])))||
(c[0]->g[1][1]&&((c[1]->g[0][0]&&f[1][0])||(c[1]->g[1][0]&&f[1][1])));
g[1][1]=(c[0]->g[1][0]&&((c[1]->g[0][1]&&f[0][0])||(c[1]->g[1][1]&&f[0][1])))||
(c[0]->g[1][1]&&((c[1]->g[0][1]&&f[1][0])||(c[1]->g[1][1]&&f[1][1])));
}
void init() {
g[0][0]=g[1][1]=1;
}
}Po[Lim], *iT=Po, *root;
node *build(int l, int r) {
node *x=iT++;
if(l==r) {
x->init();
return x;
}
int mid=(l+r)>>1;
x->c[0]=build(l, mid);
x->c[1]=build(mid+1, r);
x->up(mid);
return x;
}
void update(int p, int l=1, int r=n, node *x=root) {
if(l==r) {
return;
}
int mid=(l+r)>>1, f=p>mid;
f?(l=mid+1):(r=mid);
update(p, l, r, x->c[f]);
x->up(mid);
}
int main() {
n=getint();
for(int i=1; i<=n; ++i) {
a[i][0]=getint();
a[i][1]=getint();
}
root=build(1, n);
int m=getint();
while(m--) {
int x=getint(), y=getint();
swap(a[x][0], a[y][0]);
swap(a[x][1], a[y][1]);
update(x);
update(y);
puts((root->g[0][0]||root->g[0][1]||root->g[1][0]||root->g[1][1])?"TAK":"NIE");
}
return 0;
}

【BZOJ】3526: [Poi2014]Card的更多相关文章

  1. 【BZOJ】3524: [Poi2014]Couriers

    [算法]主席树 [题解]例题,记录和,数字出现超过一半就递归查找. 主席树见[算法]数据结构 #include<cstdio> #include<algorithm> #inc ...

  2. 【BZOJ】3835: [Poi2014]Supercomputer

    题意 \(n(1 \le 1000000)\)个点的有根树,\(1\)号点为根,\(q(1 \le 1000000)\)次询问,每次给一个\(k\),每一次可以选择\(k\)个未访问的点,且父亲是访问 ...

  3. 【BZOJ】3832: [Poi2014]Rally

    题意 \(n(2 \le n \le 500000)\)个点\(m(1 \le m \le 1000000)\)条边的有向无环图,找到一个点,使得删掉这个点后剩余图中的最长路径最短. 分析 神题不会做 ...

  4. 【BZOJ】3523: [Poi2014]Bricks

    题意 \(n(n \le 1000000)\)个物品,颜色分别为\(a[i]\),现在要求排在一排使得相邻两个砖块的颜色不同,且限定第一个砖块和最后一个砖块的颜色,输出一个合法解否则输出-1. 分析 ...

  5. 【BZOJ】3521: [Poi2014]Salad Bar

    题意 长度为\(n(1 \le n \le 1000000)\)的\(01\)字符串.找一个最长的连续子串\(S\),使得不管是从左往右还是从右往左取,都保证每时每刻已取出的\(1\)的个数不小于\( ...

  6. 【BZOJ】3834: [Poi2014]Solar Panels

    http://www.lydsy.com/JudgeOnline/problem.php?id=3834 题意:求$max\{(i,j)\}, smin<=i<=smax, wmin< ...

  7. 【BZOJ】3524 [POI2014] Couriers(主席树)

    题目 传送门:QWQ 传送到洛谷QWQ 分析 把求区间第k大的改一改就ok了. 代码 #include <bits/stdc++.h> using namespace std; ; ], ...

  8. BZOJ 3526: [Poi2014]Card

    3526: [Poi2014]Card Time Limit: 25 Sec  Memory Limit: 64 MBSubmit: 267  Solved: 191[Submit][Status][ ...

  9. 【BZOJ】3052: [wc2013]糖果公园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...

随机推荐

  1. 浅谈Android中拍照、从相册选择图片并截图相关知识点

    前言 我们在Android开发中经常会需要使用相机或者从相册中选取图片的情况,今天就把这里面相关的知识点总结下,方便以后开发的时候使用. 1.相机拍照并可自定义截图功能 我们先来看如何使用Intent ...

  2. 转:C#中TransactionScope的使用方法和原理

    在.net 1.1的时代,还没有TransactionScope类,因此很多关于事务的处理,都交给了SqlTransaction和SqlConnection,每个Transaction是基于每个Con ...

  3. 15个JavaScript本地存储技术的函数库和工具

    当构建更复杂的JavaScript应用程序运行在用户的浏览器是非常有用的,它可以在浏览器中存储信息,这样的信息可以被共享在不同的页面,浏览会话. 在最近的过去,这将有可能只被cookies文本文件保存 ...

  4. ubuntu12.04server下red5-1.0.0RC1的部署

    一.搭建环境 Linux版本:ubuntu12.04sever  64位 Java  版本:Java 1.7(jdk+jre) Red5 版本:red5-1.0.0-RC1 二.安装JDK 下载jdk ...

  5. rqnoj378 约会计划

    题目描述 cc是个超级帅哥,口才又好,rp极高(这句话似乎降rp),又非常的幽默,所以很多mm都跟他关系不错.然而,最关键的是,cc能够很好的调解各各妹妹间的关系.mm之间的关系及其复杂,cc必须严格 ...

  6. [Network] HTML、XML和JSON学习汇总

    写在前面:楼主也是刚刚接触这方面的知识,之前完全是零基础,后来经朋友推荐了几个不错的博文,看完以后豁然开朗.但是此博文更加偏重于基础知识介绍(其实更深的楼主也还不了解,这方面的大神请绕道),只是分享个 ...

  7. POJ 2478 Farey Sequence

     名字是法雷数列其实是欧拉phi函数              Farey Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submi ...

  8. 微信公众平台推出"微信保护"提升微信账号安全 附微信保护开启教程

    前两天小美女的微信公众平台要群发消息时提示需要绑定手机才能操作,当时还以为是动态ip的问题,今天微信公众平台安全中心就说升级了,原来那时已经在公测了.微信公众平台推出"微信保护", ...

  9. js parseInt 显示0

    parseInt 有第二个参数, 就是进制参数 parseInt("08", 10);  //表示这个数字是十进制的就不会出错了.

  10. angular自己最近学的一种筛选方法

    投资状态vm.statusList = [ {name:"项目状态",value:-1}, {name:"上线",value:0}, {name:"投 ...