QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#565154 | #9310. Permutation Counting 4 | wangqi | WA | 189ms | 163700kb | C++14 | 2.2kb | 2024-09-15 20:26:32 | 2024-09-15 20:26:32 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e6 + 10;
pair<int,int> a[N], b[N];
struct P{
int l, r;
vector<int> c;
}tr[N * 4];
void build(int id, int l, int r){
tr[id].l = l, tr[id].r = r;
tr[id].c.resize(r - l + 1);
if(l == r){
tr[id].c[0] = b[l].second;
return;
}
int mid = (l + r) >> 1, lf = id * 2, rt = id * 2 + 1;
build(lf, l, mid); build(rt, mid + 1, r);
int i = 0, j = 0, ct1 = mid - l + 1, ct2 = r - mid, idx = 0;
while(i < ct1 && j < ct2){
if(tr[lf].c[i] <= tr[rt].c[j]){
tr[id].c[idx ++] = tr[lf].c[i ++];
}else{
tr[id].c[idx ++] = tr[rt].c[j ++];
}
}
while(i < ct1){
tr[id].c[idx ++] = tr[lf].c[i ++];
}
while(j < ct2){
tr[id].c[idx ++] = tr[rt].c[j ++];
}
}
int find_low(int id, int l, int r, int x){
int l1 = tr[id].l, r1 = tr[id].r, mid = (l1 + r1) >> 1;
if(l <= l1 && r1 <= r){
int cnt = tr[id].c.end() - lower_bound(tr[id].c.begin(), tr[id].c.end(), x);
return cnt;
}
int lf = id * 2, rt = id * 2 + 1;
if(r <= mid){
return find_low(lf, l, r, x);
}else if(l >= mid + 1){
return find_low(rt, l, r, x);
}else{
return find_low(lf, l, r, x) + find_low(rt, l, r, x);
}
}
void solve(){
int n; cin >> n;
for(int i = 0; i < n; i ++){
cin >> a[i].first >> a[i].second;
}
sort(a, a + n);
priority_queue<pair<int,int>,vector<pair<int,int> >, greater<pair<int,int> > > qk;
int l = 0;
for(int i = 1; i <= n; i ++){
while(l < n && a[l].first <= i){
qk.push({a[l].second, a[l].first});
l ++;
}
if(qk.size() == 0){
cout << "0";
return;
}else{
int l = qk.top().second, r = qk.top().first;
if(l <= i && i <= r){
b[i] = {l, r};
qk.pop();
}else{
cout << "0";
return;
}
}
}
build(1, 1, n);
int ans = 0;
for(int i = 1; i <= n; i ++){
int up = b[i].second, ed = b[i].first;
if(ed > i - 1) continue;
ans += find_low(1, ed, i - 1, up);
}
ans = ans % 2;
cout << ans;
}
signed main(){
ios::sync_with_stdio(NULL);
cin.tie(0); cout.tie(0);
int T; cin >> T;
while(T --){
solve();
cout << '\n';
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 15ms
memory: 163284kb
input:
4 5 1 2 1 5 1 2 1 2 2 2 5 1 1 2 4 2 3 5 5 3 4 5 3 5 1 2 3 4 3 5 3 3 5 1 5 1 4 4 5 5 5 1 2
output:
0 1 0 0
result:
ok 4 tokens
Test #2:
score: -100
Wrong Answer
time: 189ms
memory: 163700kb
input:
66725 14 7 7 4 6 7 8 8 13 2 13 6 13 6 10 14 14 1 10 9 11 7 9 3 8 4 12 5 12 12 2 6 3 6 7 11 2 5 1 1 6 12 8 12 2 3 7 9 7 8 1 10 1 4 10 4 8 4 4 6 10 9 10 2 3 2 7 1 3 3 4 2 2 3 10 20 3 12 10 14 19 20 19 20 1 9 7 9 13 16 17 17 16 18 2 11 5 19 6 17 11 17 3 6 3 11 7 20 8 17 3 18 10 15 9 20 16 5 10 2 10 2 1...
output:
0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 1 1 0 1 0 0 1 1 1 1 1 1 0 1 0 0 0 0 1 0 1 1 0 1 1 0 0 0 0 0 0 0 0 1 0 1 1 1 1 0 0 1 0 0 0 0 0 1 1 0 1 0 0 0 1 0 1 1 0 1 1 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 1 0 1 1 1 1 1 1 0 0 0 1 0 1 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 1 1 0 1 0 1 0 0 0 0 0 0 ...
result:
wrong answer 1st words differ - expected: '1', found: '0'