BZOJ3526: [Poi2014]Card
来源:互联网 发布:p2p平台数据分析 编辑:程序博客网 时间:2024/06/15 14:54
题目大意:有一些卡牌,正反各有一个数,你可以任意翻转,每次操作会将两张卡牌的位置调换,你需要在每次操作后回答以现在的卡牌顺序能否通过反转形成一个单调不降的序列
线段树维护两个值,分别代表这个区间的第一张牌以较小或较大的数开始,这个区间最后一张牌用尽量小的的数来结尾的话,会选较小的还是较大的还是无解。
然后每次把交换当成修改就好啦!
#include<iostream>#include<cstdio>#define N 200010using namespace std;int a[N][2];int l[N<<2],r[N<<2],w0[N<<2],w1[N<<2];void pup(int x){int t;t=w0[x<<1];if(t==-1) w0[x]=-1;else{t=a[r[x<<1]][t];//cout<<t<<'!'<<a[l[x<<1]][0]<<' '<<a[l[x<<1|1]][1]<<endl;if(t<=a[l[x<<1|1]][0]) w0[x]=w0[x<<1|1];else if(t<=a[l[x<<1|1]][1]) w0[x]=w1[x<<1|1];else w0[x]=-1;}t=w1[x<<1];if(t==-1) w1[x]=-1;else{t=a[r[x<<1]][t];if(t<=a[l[x<<1|1]][0]) w1[x]=w0[x<<1|1];else if(t<=a[l[x<<1|1]][1]) w1[x]=w1[x<<1|1];else w1[x]=-1;}//cout<<x<<' '<<w0[x]<<' '<<w1[x]<<endl;}void build(int now,int ll,int rr){l[now]=ll;r[now]=rr;if(ll==rr){w0[now]=0;w1[now]=1;return;}int mid=(ll+rr)>>1;build(now<<1,ll,mid);build(now<<1|1,mid+1,rr);pup(now);}void change(int now,int x){if(l[now]==r[now]) return;int mid=(l[now]+r[now])>>1;if(x<=mid) change(now<<1,x);else change(now<<1|1,x);pup(now);}int main(){int n,m;scanf("%d",&n);int i,j,x,y;for(i=1;i<=n;i++){scanf("%d%d",&a[i][0],&a[i][1]);if(a[i][0]>a[i][1]) swap(a[i][0],a[i][1]);}build(1,1,n);scanf("%d",&m);while(m--){scanf("%d%d",&x,&y);swap(a[x][0],a[y][0]);swap(a[x][1],a[y][1]);change(1,x);change(1,y);if(w0[1]!=-1) puts("TAK");else puts("NIE");}}
0 0
- BZOJ3526: [Poi2014]Card
- BZOJ3526 [Poi2014]Card
- BZOJ3526[Poi2014] Card
- BZOJ3526: [Poi2014]Card
- BZOJ 3526 [Poi2014]Card
- 3526: [Poi2014]Card
- POI2014
- card
- Card
- 1012 card card card
- HDU6205 card card card
- HDU6205-card card card
- card card card
- HDU6205 card card card
- POI2014 题解
- [Poi2014]FarmCraft
- [Poi2014]FarmCraft
- HDU6205 card card card【模拟】
- JUnit4 中@AfterClass @BeforeClass @after @before的区别对比
- 移动app开发中多种设备尺寸适配问题
- Linux堆内存管理深入分析(上)
- ubuntu系统的ssh的安装和配置
- Protel.DXP2004 电路板设计
- BZOJ3526: [Poi2014]Card
- <html5>canvas和缓存
- Json 和 Jsonp
- poj-1679 The Unique MST(次小生成树模板)
- 排序算法(快速排序,冒泡排序,插入排序,堆排序)
- 第五次作业
- 深入理解Java:注解(Annotation)自定义注解入门
- 项目二 实现复数类中的运算符重载(1)
- 【Hibernate】——多对多关联映射