UOJ 180【UR #12】实验室外的攻防战
2018-01-20 21:50
387 查看
http://uoj.ac/contest/25/problem/180
从前往后对比串A,B
当$A_i,B_i$不相同时找到$B_i$在A中的位置j
若$min{A_1,A_2,A_3......A_{j-1}}<A_j$说明$A_j$无法交换到位置i,就GG惹
否则把$A_j$设为INF
线段树维护区间取min,单点修改
从前往后对比串A,B
当$A_i,B_i$不相同时找到$B_i$在A中的位置j
若$min{A_1,A_2,A_3......A_{j-1}}<A_j$说明$A_j$无法交换到位置i,就GG惹
否则把$A_j$设为INF
线段树维护区间取min,单点修改
#include<cstdio> #include<iostream> #include<algorithm> using std::cin; using std::cout; using std::min; using std::max; #define INF 0x7fffffff const int maxn = 100007; int n; inline int read() { int x=0,f=1; char c=getchar(); while(c<'0'||c>'9') { if(c=='-')f=-1;c=getchar() ; } while(c<='9'&&c>='0')x=x*10+c-'0',c=getchar(); return x*f; } int a[maxn],b[maxn]; int pos[maxn]; int minn[(maxn<<2)+3] ; void merge(int rt) { minn[rt]=min(minn[rt<<1],minn[rt<<1|1]); } void build(int l,int r,int rt) { if(l==r) { minn[rt]=a[l];return; } int mid = l+r>>1; build(l,mid,rt<<1); build(mid+1,r,rt<<1|1); merge(rt); } int query(int l,int r,int rt,int tl,int tr) { if(tl<=l&&tr>=r) { return minn[rt]; } int mid=l+r>>1; int ans=INF; if(tl<=mid) ans=min(ans,query(l,mid,rt<<1,tl,tr)); if(tr>mid) ans=min(ans,query(mid+1,r,rt<<1|1,tl,tr)); return ans; } void modify(int l,int r,int rt,int pos) { if(l==r) { minn[rt]=INF;return; } int mid= l+r>>1; if(mid>=pos)modify(l,mid,rt<<1,pos); else if(mid<pos)modify(mid+1,r,rt<<1|1,pos); merge(rt); } int main() { n=read(); for(int i=1;i<=n;++i) a[i]=read(),pos[a[i]]=i; for(int i=1;i<=n;++i) b[i]=read(); build(1,n,1); for(int i=1;i<=n;++i) { //if(a[i]!=b[i]) { int p=pos[b[i]]; int tmp=query(1,n,1,1,p); if(tmp<b[i]) { cout<<"NO"<<std::endl;return 0; } else modify(1,n,1,p); // } } cout<<"YES"<<std::endl; return 0; }
相关文章推荐
- UOJ180 【UR #12】实验室外的攻防战
- UOJ【UR #12】实验室外的攻防战
- 【UR #12】实验室外的攻防战(BIT)
- 【uoj#180】[UR #12]实验室外的攻防战 结论题+树状数组
- UOJ 225 [UR #15]奥林匹克五子棋
- UOJ 12 猜数 数学题
- UOJ 82 [UR #7]水题生成器
- UOJ #242. 【UR #16】破坏蛋糕
- UOJ#61. 【UR #5】怎样更有力气
- uoj problem 12 猜数
- [UOJ]#61. 【UR #5】怎样更有力气
- UOJ 12 [UER #1]猜数
- [UOJ 74] 【UR #6】破解密码
- UOJ 75 [UR #6]智商锁
- UOJ #188. 【UR #13】Sanrd
- UOJ #60 [UR #5] 怎样提高智商
- UOJ 31 [UR #2]猪猪侠再战括号序列
- 180中国跳棋(12)186(13)191(14)196(15)201(16)205(17)209.5(18)
- UOJ#152. 【UR #10】汉诺塔
- uoj#187. 【UR #13】Ernd