题目链接

BZOJ3526

题解

思来想去,发现很显然可以用线段树维护

每个区间保存所有合法方案的左右端点【当左端点一定是,右端点当然存最小的那个就行了】

这么整的数,\(\frac{1}{1000}\)的概率啊23333

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define mp(a,b) make_pair<int,int>(a,b)
#define cls(s) memset(s,0,sizeof(s))
#define cp pair<int,int>
#define LL long long int
#define ls (u << 1)
#define rs (u << 1 | 1)
using namespace std;
const int maxn = 200005,maxm = 100005,INF = 1000000000;
inline int read(){
int out = 0,flag = 1; char c = getchar();
while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}
while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}
return out * flag;
}
int ln[maxn << 2][2],rn[maxn << 2][2],cnt[maxn << 2];
int a[maxn],b[maxn],n,m;
void upd(int u){
if (!cnt[ls] || !cnt[rs]) cnt[u] = 0;
else {
cnt[u] = 0;
for (int i = 0; i < cnt[ls]; i++){
int r = INF;
for (int j = 0; j < cnt[rs]; j++){
if (rn[ls][i] <= ln[rs][j])
r = min(r,rn[rs][j]);
}
if (r < INF){
ln[u][cnt[u]] = ln[ls][i];
rn[u][cnt[u]] = r;
cnt[u]++;
}
}
}
}
void build(int u,int l,int r){
if (l == r){
cnt[u] = 2;
ln[u][0] = rn[u][0] = a[l];
ln[u][1] = rn[u][1] = b[l];
return;
}
int mid = l + r >> 1;
build(ls,l,mid);
build(rs,mid + 1,r);
upd(u);
}
void modify(int u,int l,int r,int pos,cp v){
if (l == r){
cnt[u] = 2;
ln[u][0] = rn[u][0] = v.first;
ln[u][1] = rn[u][1] = v.second;
return;
}
int mid = l + r >> 1;
if (mid >= pos) modify(ls,l,mid,pos,v);
else modify(rs,mid + 1,r,pos,v);
upd(u);
}
void print(int u,int l,int r){
if (l == r){
printf("(%d,%d) ",ln[u][0],ln[u][1]);
return;
}
int mid = l + r >> 1;
print(ls,l,mid); print(rs,mid + 1,r);
}
int main(){
n = read();
REP(i,n) a[i] = read(),b[i] = read();
build(1,1,n);
m = read();
int c,d;
while (m--){
//print(1,1,n); puts("");
c = read(); d = read();
modify(1,1,n,c,mp(a[d],b[d]));
modify(1,1,n,d,mp(a[c],b[c]));
swap(a[c],a[d]); swap(b[c],b[d]);
puts(cnt[1] ? "TAK" : "NIE");
}
return 0;
}

最新文章

  1. C#设计模式系列:单一职责原则(Single Responsibility Principle)
  2. jQuery动画特效实例教程
  3. 学习codeIgniter的一点小感受
  4. 借助阿里AntUI元素实现两个Web页面之间的过渡——“Loading…”
  5. java与javac版本不一致问题
  6. linux下如何查看主机的外网ip地址
  7. eclipse注册码生成,在eclipse3.3.x上测试可用
  8. Windows环境下Android NDK环境搭建
  9. window—BAT脚本
  10. PE基金的运作模式有哪些?
  11. url语法
  12. hdu 4630 查询[L,R]区间内任意两个数的最大公约数
  13. bat脚本+diskpart 脚本实现自动划分磁盘分区
  14. Puppet主机、模块、类、资源、变量、参数、标签命名规范
  15. cxGrid用法-最新
  16. 自定义延时关闭弹窗,替代MesssageBox
  17. javascript DOM扩展querySelector()和和querySelectorAll()
  18. 基于zabbix的Redis、Sentinel、Slave多实例自动发现监控
  19. mysql &amp; vs2013
  20. 软件工程 part4 评价3作品 修改

热门文章

  1. 安装MySQLdb模块遭遇&quot;fatal error: my_config.h: No such file or directory&quot;的处理
  2. 第四模块:网络编程进阶&amp;数据库开发 第2章&#183;MySQL数据库开发
  3. lintcode491 回文数
  4. JavaScript 之 对象/JSON/数组
  5. 加密SecurityHelper
  6. Reject Inference: Your Data is Deceiving You
  7. 自测之Lesson14:多线程编程
  8. Thunder团队第六周 - Scrum会7
  9. 《剑指offer》---两个栈实现队列
  10. MVC4 DropDownList (一) — 使用方法