이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "aliens.h"
#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
typedef pair<ll,ll>pairll;
#define N 100007
#define fr first
#define sc second
ll h,nl[2*N],nr[2*N],pr[2*N],nx[2*N],p,f[2*N];
struct D{
ll l,r;
}d[2*N];
bool mcp(D d1, D d2){
if(d1.l!=d2.l)return d1.l<d2.l;
return d1.r>d2.r;
}
ll T(ll x,ll y){
if(nr[x]<nl[y] || x==0)return 0;
return (nr[x]-nl[y]+1)*(nr[x]-nl[y]+1);
}
ll S(ll x,ll y){
return (nr[y]-nl[x]+1)*(nr[y]-nl[x]+1)-(nr[y]-nl[y]+1)*(nr[y]-nl[y]+1)-(nr[x]-nl[x]+1)*(nr[x]-nl[x]+1);
}
priority_queue<pairll,vector<pairll>, greater<pairll> >q;
long long take_photos(int n, int m, int k, std::vector<int> r, std::vector<int> c) {
for(int i=0;i<n;i++){
ll x=0;
ll y=0;
x=min(r[i],c[i]);
y=max(r[i],c[i]);
h++;
d[h]={x,y};
}
sort(d+1,d+1+h,mcp);
ll x=-1;
for(int i=1;i<=h;i++){
if(x<d[i].r){
p++;
nl[p]=d[i].l;
nr[p]=d[i].r;
}
x=max(x,d[i].r);
}
ll res=0;
for(int i=1;i<=p;i++){
//cout<<i<<" "<<
res+=(nr[i]-nl[i]+1)*(nr[i]-nl[i]+1)-T(i-1,i);
pr[i]=i-1;
nx[i]=i+1;
if(i!=1)q.push({S(i-1,i),i-1});
}
for(int i=1;i<=p-k;i++){
while(q.size()>0 && (q.top().fr!=S(q.top().sc,nx[q.top().sc]) || f[q.top().sc]==1))q.pop();
//cout<<res<<" "<<q.top().fr<<" "<<q.top().sc<<endl;
res+=q.top().fr;
ll m1=q.top().sc;
nr[m1]=nr[nx[m1]];
f[nx[m1]]=1;
nx[m1]=nx[nx[m1]];
if(nx[m1]!=0 && nx[m1]!=p+1){
q.push({S(m1,nx[m1]),m1});
}
if(pr[m1]!=0){
q.push({S(pr[m1],m1),pr[m1]});
}
}
return res;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |