HDU 5821 Ball 贪心

来源:互联网 发布:变形金刚弹簧淘宝 编辑:程序博客网 时间:2024/05/17 20:22

传送门:HDU5821

题意:有N个盒子,每个盒子最多装一个球. 球的颜色不一定相同.现在要进行m次区间操作:
每次操作将[l, r]区间内的球拿出来后,再随意将区间内的球重新分配回去.
问经过上述操作后是否有可能达到给定的状态.
思路:先贪心的给每个球在b数组中找个位置,然后每次选一个区间就相当于对这个区间排序,使得每个球朝其位置方向去,最后判断一下是不是每个球都在目标位置上就行了。

代码:

#include<bits/stdc++.h>#define ll long long#define pi acos(-1)#define MAXN 1010#define inf 0x3f3f3f3fusing namespace std;typedef pair<int,int>P;P a[MAXN];int main(){int T, n, m, t, l, r;cin >> T;while(T--){scanf("%d %d", &n, &m);for(int i = 1; i <= n; i++)scanf("%d", &a[i].second), a[i].first = 0;for(int i = 1; i <= n; i++){scanf("%d", &t);for(int j = 1; j <= n; j++)if(a[j].first == 0 && a[j].second == t){a[j].first = i;break;}}while(m--){scanf("%d %d", &l, &r);sort(a + l, a + r + 1);}bool flag = 0;for(int i = 1; i <= n; i++){if(a[i].first != i) flag = 1;}if(flag) cout << "No\n";else cout << "Yes\n";}    return 0;}