社区讨论
萌新刚学算法主席树全wa求助
P3901数列找不同参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @loc1too2
- 此快照首次捕获于
- 2023/10/30 06:34 2 年前
- 此快照最后确认于
- 2023/11/04 12:09 2 年前
CPP
#include<iostream>
#include<algorithm>
using namespace std;
struct node {
int l, r, ans;
}tree[200005];
int a[100005], all = 0,root[100005],lsh[1000005];
int new_node(int at){
tree[++all] = tree[at];
return all;
}
int build(int l,int r,int at) {
at = ++all;
if (l == r) {
return at;
}
int mid = (l + r) >> 1;
tree[at].l = build(l, mid, tree[at].l);
tree[at].r = build(mid + 1, r, tree[at].r);
return at;
}
int insert(int l,int r,int at,int to) {
int now = new_node(at);
if (l == r) {
if (!tree[now].ans)
tree[now].ans = 1;
return now;
}
int mid = (l + r) >> 1;
if (to <= mid)tree[now].l = insert(l, mid, tree[now].l, to);
else tree[now].r = insert(mid + 1, r, tree[now].r, to);
tree[now].ans = tree[tree[now].l].ans + tree[tree[now].r].ans;
return now;
}
int main() {
int n, t;
cin >> n >> t;
for (int i = 1; i <= n; i++) {
cin >> a[i];
lsh[i] = a[i];
}
root[0] = build(1, n, 0);
sort(a + 1, a + n + 1);
int m = unique(a + 1, a + n + 1) - a - 1;
for (int i = 1; i <= n; i++) {
lsh[i] = lower_bound(a + 1, a + m + 1, lsh[i]) - a;
root[i] = insert(1, n, root[i-1],lsh[i]);
}
while (t--) {
int l, r;
cin >> l >> r;
int now = r - l + 1;
int x = tree[root[r]].ans - tree[root[l - 1]].ans;
if (x == now)
cout << "Yes" << endl;
else
cout << "No" << endl;
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...