#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
tree<pair<int,int>,null_type,less<pair<int,int> >,rb_tree_tag,tree_order_statistics_node_update> t;
int stt[200005],ent[200005],ct,dp[20][200005],stree[800005];
vector<int> v[200005];
void dfs(int node)
{
for (int i=1;i<20;i++)
{
if (dp[i-1][node]!=-1)
dp[i][node]=dp[i-1][dp[i-1][node]];
}
stt[node]=++ct;
for (int u:v[node])
dfs(u);
ent[node]=ct;
}
void update(int node,int st,int en,int idx,int val)
{
if (st==en)
stree[node]=val;
else
{
int mid=(st+en)/2;
if (st<=idx && idx<=mid)
update(2*node,st,mid,idx,val);
else
update(2*node+1,mid+1,en,idx,val);
stree[node]=(stree[2*node]&stree[2*node+1]);
}
}
int query(int node,int st,int en,int l,int r)
{
if (en<l || st>r || r<l)
return 1;
if (l<=st && en<=r)
return stree[node];
int mid=(st+en)/2;
return (query(2*node,st,mid,l,r)&query(2*node+1,mid+1,en,l,r));
}
int get(int pos)
{
int ans=0,cur=pos;
for (int i=19;i>=0;i--)
{
if (dp[i][cur]!=-1 && query(1,1,ct,stt[dp[i][cur]],ent[dp[i][cur]]))
{
ans+=(1<<i);
cur=dp[i][cur];
}
}
return ans;
}
int GetBestPosition(int n,int c,int r,int *k,int *s,int *e)
{
memset(dp,-1,sizeof(dp));
for (int i=0;i<n;i++)
t.insert({i,i});
for (int i=0;i<c;i++)
{
int cnt=e[i]-s[i]+1,cur;
for (auto it=t.find_by_order(s[i]);cnt;cnt--)
{
auto tmp=it;
it++;
cur=tmp->first;
dp[0][tmp->second]=n+i;
t.erase(tmp);
}
t.insert({cur,n+i});
}
for (int i=0;i<n+c-1;i++)
v[dp[0][i]].push_back(i);
dfs(n+c-1);
for (int i=0;i<n+c;i++)
update(1,1,ct,stt[i],1);
for (int i=1;i<n;i++)
update(1,1,ct,stt[i],(k[i-1]<r));
int ans=get(0),pos=0;
for (int i=1;i<n;i++)
{
update(1,1,ct,stt[i],1);
update(1,1,ct,stt[i-1],(k[i-1]<r));
if (get(i)>ans)
{
ans=get(i);
pos=i;
}
}
return pos;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
19 ms |
20728 KB |
Output is correct |
2 |
Correct |
19 ms |
20732 KB |
Output is correct |
3 |
Correct |
21 ms |
20728 KB |
Output is correct |
4 |
Correct |
21 ms |
20728 KB |
Output is correct |
5 |
Correct |
20 ms |
20728 KB |
Output is correct |
6 |
Correct |
21 ms |
20728 KB |
Output is correct |
7 |
Correct |
24 ms |
20728 KB |
Output is correct |
8 |
Correct |
21 ms |
20700 KB |
Output is correct |
9 |
Correct |
24 ms |
20728 KB |
Output is correct |
10 |
Correct |
24 ms |
20860 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
21 ms |
20856 KB |
Output is correct |
2 |
Correct |
40 ms |
21552 KB |
Output is correct |
3 |
Correct |
26 ms |
21240 KB |
Output is correct |
4 |
Correct |
37 ms |
21624 KB |
Output is correct |
5 |
Correct |
35 ms |
21496 KB |
Output is correct |
6 |
Correct |
33 ms |
21368 KB |
Output is correct |
7 |
Correct |
42 ms |
21496 KB |
Output is correct |
8 |
Correct |
42 ms |
21504 KB |
Output is correct |
9 |
Correct |
26 ms |
21240 KB |
Output is correct |
10 |
Correct |
34 ms |
21368 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
201 ms |
26744 KB |
Output is correct |
2 |
Correct |
660 ms |
36240 KB |
Output is correct |
3 |
Correct |
268 ms |
30072 KB |
Output is correct |
4 |
Correct |
623 ms |
34408 KB |
Output is correct |
5 |
Correct |
663 ms |
34808 KB |
Output is correct |
6 |
Correct |
416 ms |
32484 KB |
Output is correct |
7 |
Correct |
639 ms |
35012 KB |
Output is correct |
8 |
Correct |
672 ms |
35064 KB |
Output is correct |
9 |
Correct |
256 ms |
29856 KB |
Output is correct |
10 |
Correct |
298 ms |
30044 KB |
Output is correct |