QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#691420 | #7660. Investigating Frog Behaviour on Lily Pad Patterns | ptit_noodles | RE | 3ms | 40852kb | C++23 | 2.4kb | 2024-10-31 11:24:25 | 2024-10-31 11:24:27 |
Judging History
answer
#ifdef DS
#include "debug.h"
#else
#include<bits/stdc++.h>
#define deb(...)
#endif
using namespace std;
#define FOR(i,a,b) for (int i=a;i<=b;i++)
#define FOD(i,a,b) for (int i=a;i>=b;i--)
#define ALL(x) x.begin(),x.end()
#define NALL(x) x.begin()+1,x.end()
#define TIME "Time elapsed : "<<(double)clock()/1000<<" s"
#define int long long
#define vi vector<int>
#define pii pair<int,int>
const int MOD=1e9+7,INF=4e18;
#define maxn
struct Node{
int val;
Node()
{
// init val for the empty Node
val = 0;
}
};
Node makeNode(int _val)
{
Node ans;
// assign the value to Node
ans.val = _val;
return ans;
}
Node Merge(Node l,Node r)
{
Node ans;
// combine two Node
ans.val = l.val + r.val;
return ans;
}
struct Segment_Tree{
vector<Node> st;
Segment_Tree (int _sz)
{
st.resize(_sz << 2);
}
void update(int id,int l,int r,int pos,int val)
{
if (l > pos || r < pos) return;
if (l == r)
return st[id] = makeNode(val), void(); // base Node
int m = l+r >> 1;
update(id << 1,l,m,pos,val);
update(id << 1 | 1,m+1,r,pos,val);
st[id] = Merge(st[id << 1], st[id << 1 | 1]);
}
Node get(int id,int l,int r,int u,int v)
{
if (r < u || l > v) return Node();
if (l >= u && r <= v) return st[id];
int m = l+r >> 1;
return Merge(get(id << 1,l,m,u,v), get(id << 1 | 1,m+1,r,u,v));
}
};
int pos[100005];
signed main()
{
#ifndef ONLINE_JUDGE
freopen("thu.inp","r",stdin);
#endif
ios_base::sync_with_stdio(0);
cin.tie(NULL);
int n; cin>>n;
vi a(n+1);
int x_max = 0;
FOR(i,1,n)
{
cin>>a[i];
x_max = max(x_max,a[i]);
pos[i] = a[i];
}
int N = 1e6 + 2e5;
Segment_Tree st(N);
FOR(i,1,n)
{
st.update(1,1,N,a[i],1);
}
int q; cin>>q;
while (q--)
{
int x; cin>>x;
int val = pos[x];
int l = val+1, r = N;
int ans = -1;
while (l <= r)
{
int m = l+r >> 1;
if (st.get(1,1,N,val+1,m).val < m-val)
{
ans = m;
r = m-1;
}
else l = m+1;
}
cout<<ans<<'\n';
st.update(1,1,N,val,0);
pos[x] = ans;
st.update(1,1,N,ans,1);
}
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 40852kb
input:
5 1 2 3 5 7 3 1 2 4
output:
4 6 8
result:
ok 3 lines
Test #2:
score: 0
Accepted
time: 0ms
memory: 40620kb
input:
5 1 2 3 5 7 4 1 1 1 1
output:
4 6 8 9
result:
ok 4 lines
Test #3:
score: 0
Accepted
time: 3ms
memory: 40676kb
input:
5 1 2 3 4 5 20 1 4 4 3 5 3 3 5 2 2 5 4 1 4 2 3 1 5 3 3
output:
6 7 8 4 7 5 9 10 3 4 11 10 7 12 5 10 8 13 11 14
result:
ok 20 lines
Test #4:
score: 0
Accepted
time: 3ms
memory: 40688kb
input:
10 2 4 6 7 8 9 10 12 13 14 1000 4 5 4 6 2 5 2 9 6 10 6 2 1 3 7 3 9 5 2 10 8 7 6 7 4 7 9 4 4 4 5 2 6 1 10 9 10 3 7 10 5 9 5 8 4 8 10 9 1 7 10 8 10 6 7 7 10 8 1 2 9 10 2 3 8 7 2 7 2 2 1 10 3 3 2 8 9 6 10 1 7 9 10 6 5 9 9 6 4 9 10 3 3 10 5 4 8 5 8 4 9 5 5 3 9 7 5 5 4 6 1 8 6 7 9 2 2 4 9 3 6 4 6 8 4 4 3...
output:
11 15 16 11 5 17 7 15 13 18 14 8 3 7 11 9 19 20 10 21 13 12 15 14 17 16 22 18 19 23 24 11 17 4 25 26 27 10 18 28 25 27 26 14 24 15 29 28 5 19 30 16 31 18 20 21 32 17 6 12 29 33 13 11 19 22 14 23 15 16 7 34 12 13 17 20 30 19 35 8 25 31 36 21 27 32 33 22 26 34 37 14 15 38 28 27 21 29 23 28 35 30 31 16...
result:
ok 1000 lines
Test #5:
score: 0
Accepted
time: 0ms
memory: 40744kb
input:
20 1 2 3 4 6 7 8 9 10 11 12 13 14 15 17 18 20 21 22 24 1000 5 13 20 2 2 3 3 16 6 9 4 16 13 6 10 4 14 13 10 18 17 16 2 11 10 11 16 15 16 8 20 7 2 15 9 2 10 7 15 9 7 11 7 18 10 20 1 12 6 9 19 17 4 7 13 8 17 7 14 1 17 11 17 1 4 4 4 5 14 1 14 6 13 3 3 16 20 13 9 20 1 11 2 12 15 2 9 7 3 6 15 7 11 12 17 5...
output:
16 19 25 5 6 5 14 23 18 24 5 26 23 19 18 7 27 28 23 29 21 30 10 15 26 18 31 20 32 11 30 9 12 23 25 15 31 10 24 26 12 20 17 33 34 31 2 18 23 29 25 22 8 19 30 12 26 21 28 3 27 22 35 4 9 10 11 17 36 5 37 26 36 16 19 38 32 39 30 36 6 23 16 20 27 18 31 22 21 28 29 24 26 22 40 19 23 27 30 41 37 32 42 29 3...
result:
ok 1000 lines
Test #6:
score: -100
Runtime Error
input:
200000 1 2 3 4 5 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 64 65 66 67 68 69 71 72 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 103 105 106...