#include <bits/stdc++.h>
using namespace std;
int fen[100005],init[100005],nxt[100005],pr[100005],KK[100005],n;
void update(int idx,int val){
for (int i = idx; i <= (n+1); i+=(i&(-i)))
fen[i]+=val;
}
int get(int idx){
int h=0;
for (int i = idx; i >= 1; i-=(i&(-i)))
h+=fen[i];
return h;
}
int gimme(int nb,int l=0,int r=n){
nb++;
int ans=-1;
while(l<=r){
int med=(l+r)>>1;
if(get(med+1)>=nb)
r=med-1,ans=med;
else l=med+1;
}
assert(ans!=-1);
return ans;
}
int GetBestPosition(int N, int C, int R, int *K, int *S, int *E) {
vector<int> vec(N);
n=N;
for (int i = 1; i <= N; ++i)
update(i,1),vec[i-1]=K[i-1];
update(N+1,1);
for (int i = 1; i <= N+1; ++i)init[i]=fen[i];
int ans=-1,m=-1;
for (int p = 0; p <= N; ++p)
{
int sum=0;
for (int i = 1; i <= N+1; ++i){
if((i-1)<p)KK[i-1]=K[i-1];
else if((i-1)==p)KK[i-1]=R;
else KK[i-1]=K[i-2];
fen[i]=init[i];
if(i!=1)pr[i-1]=i-2;
if(i!=(N+1))nxt[i-1]=i;
}
vec.insert(vec.begin()+p,R);
for (int i = 0; i < C; ++i)
{
int st=gimme(S[i]),e=gimme(E[i]);
int ST=st;
int maxi=-1,arg=-1;
while(st!=e){
if(KK[st]>maxi)maxi=KK[st],arg=st;
update(st+1,-1);
st=nxt[st];
}
if(KK[e]>maxi)maxi=KK[e],arg=e;
update(e+1,-1);
update(arg+1,1);
sum+=(arg==p);
if(ST)nxt[pr[ST]]=arg,pr[arg]=pr[ST];
if(e!=N)nxt[arg]=nxt[e],pr[nxt[e]]=arg;
}
if(sum>ans)ans=sum,m=p;
vec.erase(vec.begin()+p);
}
return m;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Correct |
2 ms |
384 KB |
Output is correct |
3 |
Correct |
53 ms |
384 KB |
Output is correct |
4 |
Correct |
43 ms |
384 KB |
Output is correct |
5 |
Correct |
7 ms |
384 KB |
Output is correct |
6 |
Correct |
47 ms |
384 KB |
Output is correct |
7 |
Correct |
46 ms |
384 KB |
Output is correct |
8 |
Correct |
48 ms |
404 KB |
Output is correct |
9 |
Correct |
4 ms |
384 KB |
Output is correct |
10 |
Correct |
12 ms |
384 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
190 ms |
416 KB |
Output is correct |
2 |
Execution timed out |
1080 ms |
640 KB |
Time limit exceeded |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
1087 ms |
2176 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |