QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#555372 | #3101. Event Hopping 2 | cocoa_chan | 0 | 100ms | 107308kb | C++17 | 3.7kb | 2024-09-09 22:12:08 | 2024-09-09 22:12:08 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
const ll siz=262144;
const ll inf=1e18;
ll n,m,i,j,k,l,r,x,y,z,w,s,t,a[1100000],seg[1100000],lazy[1100000],e,ee,sparse[31][220000],cur,mn,asdf,ans[1100000];
set<ll> le,ri;
pair<ll,ll> p[1100000],q[1100000];
vector<ll> u,v[1100000];
void propagate(ll x,ll y,ll z)
{
if(z<siz)
{
lazy[z*2]+=lazy[z];
lazy[z*2+1]+=lazy[z];
}
seg[z]+=lazy[z];
lazy[z]=0;
}
void f(ll x,ll y,ll z,ll w)
{
propagate(x,y,z);
if(l>y||x>r)
return;
if(l<=x&&y<=r)
{
lazy[z]+=w;
propagate(x,y,z);
return;
}
f(x,(x+y)/2,z*2,w);
f((x+y)/2+1,y,z*2+1,w);
seg[z]=seg[z*2]+seg[z*2+1];
}
ll g(ll x,ll y,ll z)
{
propagate(x,y,z);
if(l>y||x>r)
return 0;
if(l<=x&&y<=r)
return seg[z];
return g(x,(x+y)/2,z*2)+g((x+y)/2+1,y,z*2+1);
}
ll interval(ll x,ll y)
{
ll e=30,s=0;
while(e>=0)
{
if(sparse[e][x]<=y)
{
s+=1<<e;
// printf("(%lld:%lld,%lld)",x,e,sparse[e][x]);
x=sparse[e][x]+1;
}
e--;
}
return s;
}
ll inthere(ll x,ll y)
{
l=x;
r=y;
return g(1,siz,1);
}
ll prv(ll x)
{
return *(--ri.lower_bound(x));
}
ll nxt(ll x)
{
return *(le.lower_bound(x+1));
}
void add(ll x,ll y)
{
le.insert(x);
ri.insert(y);
l=x;
r=y;
f(1,siz,1,1);
}
int main()
{
le.insert(2*n+4);
ri.insert(0);
scanf("%lld %lld",&n,&k);
for(i=1;i<=n;i++)
{
scanf("%lld %lld",&x,&y);
y--;
u.push_back(x);
u.push_back(y);
p[i]={x,y};
}
sort(u.begin(),u.end());
u.erase(unique(u.begin(),u.end()),u.end());
for(i=1;i<=n;i++)
{
p[i].first=lower_bound(u.begin(),u.end(),p[i].first)-u.begin()+2;
p[i].second=lower_bound(u.begin(),u.end(),p[i].second)-u.begin()+2;
x=p[i].first;
y=p[i].second;
q[i]={y,x};
}
sort(q+1,q+n+1);
for(i=1;i<=n;i++)
swap(q[i].first,q[i].second);
for(i=1;i<=n;i++)
{
// printf("(%lld,%lld)\n",q[i].first,q[i].second);
}
for(i=1;i<=n;i++)
{
v[q[i].first].push_back(i);
}
mn=2*n+4;
cur=2*n+4;
q[2*n+4]={2*n+3,2*n+3};
sparse[0][2*n+4]=2*n+4;
q[0]={1,1};
for(i=n*2+3;i>=1;i--)
{
x=i;
for(auto xx:v[i+1])
{
if(mn>q[xx].second)
{
mn=q[xx].second;
cur=xx;
}
}
// printf("(%lld:%lld)\n",i,cur);
sparse[0][i]=mn;
}
/*for(i=1;i<=2*n+4;i++)
printf("(%lld)",sparse[e][i]);
printf("\n");
*/for(e=1;e<=30;e++)
{
for(i=1;i<=n*2+4;i++)
{
sparse[e][i]=sparse[e-1][min(sparse[e-1][i],2*n+4)];
// printf("(%lld)",sparse[e][i]);
}
// printf("\n");
}
//printf("?");
if(interval(1,2*n+2)<k)
{
// printf("(%lld)",interval(1,2*n+2));
printf("-1");
return 0;
}
m=k;
t=interval(1,2*n+2);
//printf("%lld\n",t);
cur=0;
for(i=1;i<=n;i++)
{
// printf("(%lld)\n",i);
x=p[i].first;
y=p[i].second;
if(inthere(x,y))
continue;
z=prv(x);
w=nxt(y);
asdf=-interval(z+1,w-1)+interval(z+1,x-1)+interval(y+1,w-1);
s=t+asdf+cur;
if(s>=k)
{
t+=asdf;
cur++;
ans[cur]=i;
add(x,y);
}
}
for(i=1;i<=k;i++)
{
printf("%lld\n",ans[i]);
}
}
详细
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 0
Wrong Answer
time: 9ms
memory: 91872kb
input:
1 1 1 3
output:
0
result:
wrong answer 1st lines differ - expected: '1', found: '0'
Subtask #2:
score: 0
Wrong Answer
Test #47:
score: 0
Wrong Answer
time: 0ms
memory: 91252kb
input:
1 1 134842099 137944073
output:
0
result:
wrong answer 1st lines differ - expected: '1', found: '0'
Subtask #3:
score: 0
Wrong Answer
Test #74:
score: 0
Wrong Answer
time: 8ms
memory: 92976kb
input:
3000 57 226083340 261990234 392684356 462929590 468018811 841719892 495096853 606046097 196983814 256423598 331199122 967656486 802593662 931108452 74501453 679054962 294344294 752837262 295708332 547261648 265421699 652708933 272959087 727136240 165667761 846917534 61770748 157663302 608516043 8492...
output:
1 2 3 14 18 49 100 146 228 257 347 600 665 766 811 977 1670 1774 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
result:
wrong answer 1st lines differ - expected: '50', found: '1'
Subtask #4:
score: 0
Wrong Answer
Test #111:
score: 0
Wrong Answer
time: 100ms
memory: 107308kb
input:
100000 361 136798318 785362988 255943758 535488232 175203444 266819907 766993466 893575347 67274251 589651108 662289594 883406317 830803801 849703610 729398668 798198453 202605534 677648797 66407931 925909114 174421361 601553812 522629146 701284080 136544340 295925673 299796891 499869765 736583725 8...
output:
1 7 45 86 141 189 278 542 556 728 1705 2577 3831 4471 4619 4903 5430 8092 12483 13019 14581 14936 15742 15963 17138 22185 40315 41097 50247 50646 51868 54071 56780 58243 70970 73408 87024 98060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
result:
wrong answer 1st lines differ - expected: '42', found: '1'