답안 #202169

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
202169 2020-02-14T03:38:10 Z Segtree Bulldozer (JOI17_bulldozer) C++14
20 / 100
2000 ms 66260 KB
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> P;
typedef complex<long double> C;
#define chmax(a,b) a=max(a,b)
#define chmin(a,b) a=min(a,b)
#define all(x) x.begin(),x.end()
#define rep(i,n) for(int i=0;i<n;i++)
#define mod 1000000007
#define mad(a,b) a=(a+b)%mod
#define PI acosl(-1)
#define N 2048
ll n,x[N],y[N],w[N];

ll dat1[2*N],dat2[2*N],dat3[2*N];
void init(){
    rep(i,2*N){
	dat1[i]=1e17;
	dat2[i]=-1e17;
	dat3[i]=0;
    }
}
void upd(ll i,ll x){
    //cout<<"update"<<i<<" "<<x<<" ";
    i+=N;
    dat1[i]=dat2[i]=x;
    for(;i>1;i>>=1){
	dat1[i/2]=min(dat1[i],dat1[i^1]);
	dat2[i/2]=max(dat2[i],dat2[i^1]);
	int a=i,b=i^1; if(a>b)swap(a,b);
	dat3[i/2]=max(dat2[b]-dat1[a],max(dat3[a],dat3[b]));
    }
    //cout<<dat3[1]<<endl;
}
/*ll rsm(){
    return dat3[1];
}*/
ll rsm(){
    ll mi=0,res=0;
    rep(i,n){
	chmin(mi,dat1[N+i+1]);
	chmax(res,dat1[N+i+1]-mi);
    }
    assert(res<=dat3[1]);
    return res;
}

ll pl[N];
ll swp(int a,int b){//cout<<"swp"<<w[a]<<" "<<w[b]<<endl;
    if(pl[a]>pl[b])swap(a,b);
    upd(pl[a]+1,dat1[N+pl[a]]+w[b]);
    swap(pl[a],pl[b]);//cout<<"rsm"<<rsm()<<endl;
    return rsm();
}

struct qry{
    ld arg;
    ll a,b;
    bool operator<(const qry&key)const{
	return this->arg<key.arg;
    }
};

int main(){
    cin>>n;
    rep(i,n){
	cin>>x[i]>>y[i]>>w[i];
    }
    rep(i,n)rep(j,n-1){
	bool sw=0;
	if(y[j]!=y[j+1])sw=y[j]>y[j+1];
	else if(x[j]!=x[j+1])sw=x[j]<x[j+1];
	if(sw){
	    swap(x[j],x[j+1]);
	    swap(y[j],y[j+1]);
	    swap(w[j],w[j+1]);
	}
    }
    init();
    ll rui=0;
    upd(0,rui);
    rep(i,n){
	rui+=w[i];
	upd(i+1,rui);
	pl[i]=i;
    }
    
    vector<qry> Q;
    rep(i,n)rep(j,i){
	ld vl=atan2(y[i]-y[j],x[i]-x[j]);
	ld vr=atan2(y[j]-y[i],x[j]-x[i]);
	//cout<<"atan"<<w[i]<<" "<<w[j]<<" "<<vl<<" "<<vr<<endl;
	Q.push_back((struct qry){max(vl,vr),i,j});
    }
    sort(all(Q));
    ll ans=0;
    chmax(ans,rsm());
    rep(i,Q.size()){
	chmax(ans,swp(Q[i].a,Q[i].b));
    }
    cout<<ans<<endl;
}


Compilation message

bulldozer.cpp: In function 'int main()':
bulldozer.cpp:10:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define rep(i,n) for(int i=0;i<n;i++)
bulldozer.cpp:100:9:
     rep(i,Q.size()){
         ~~~~~~~~~~             
bulldozer.cpp:100:5: note: in expansion of macro 'rep'
     rep(i,Q.size()){
     ^~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 7 ms 888 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 888 KB Output is correct
2 Correct 7 ms 888 KB Output is correct
3 Correct 7 ms 888 KB Output is correct
4 Correct 7 ms 888 KB Output is correct
5 Correct 7 ms 888 KB Output is correct
6 Correct 8 ms 888 KB Output is correct
7 Correct 7 ms 892 KB Output is correct
8 Correct 8 ms 888 KB Output is correct
9 Correct 8 ms 888 KB Output is correct
10 Correct 7 ms 888 KB Output is correct
11 Correct 5 ms 376 KB Output is correct
12 Correct 5 ms 376 KB Output is correct
13 Correct 5 ms 376 KB Output is correct
14 Correct 5 ms 376 KB Output is correct
15 Correct 5 ms 376 KB Output is correct
16 Correct 5 ms 376 KB Output is correct
17 Correct 5 ms 380 KB Output is correct
18 Correct 5 ms 376 KB Output is correct
19 Correct 5 ms 376 KB Output is correct
20 Correct 6 ms 376 KB Output is correct
21 Correct 7 ms 888 KB Output is correct
22 Correct 8 ms 888 KB Output is correct
23 Correct 8 ms 888 KB Output is correct
24 Correct 8 ms 888 KB Output is correct
25 Correct 8 ms 888 KB Output is correct
26 Correct 8 ms 888 KB Output is correct
27 Correct 7 ms 888 KB Output is correct
28 Correct 8 ms 888 KB Output is correct
29 Correct 7 ms 888 KB Output is correct
30 Correct 7 ms 888 KB Output is correct
31 Correct 7 ms 888 KB Output is correct
32 Correct 7 ms 888 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 888 KB Output is correct
2 Correct 7 ms 888 KB Output is correct
3 Correct 7 ms 888 KB Output is correct
4 Correct 7 ms 888 KB Output is correct
5 Correct 7 ms 888 KB Output is correct
6 Correct 8 ms 888 KB Output is correct
7 Correct 7 ms 892 KB Output is correct
8 Correct 8 ms 888 KB Output is correct
9 Correct 8 ms 888 KB Output is correct
10 Correct 7 ms 888 KB Output is correct
11 Correct 5 ms 376 KB Output is correct
12 Correct 5 ms 376 KB Output is correct
13 Correct 5 ms 376 KB Output is correct
14 Correct 5 ms 376 KB Output is correct
15 Correct 5 ms 376 KB Output is correct
16 Correct 5 ms 376 KB Output is correct
17 Correct 5 ms 380 KB Output is correct
18 Correct 5 ms 376 KB Output is correct
19 Correct 5 ms 376 KB Output is correct
20 Correct 6 ms 376 KB Output is correct
21 Correct 7 ms 888 KB Output is correct
22 Correct 8 ms 888 KB Output is correct
23 Correct 8 ms 888 KB Output is correct
24 Correct 8 ms 888 KB Output is correct
25 Correct 8 ms 888 KB Output is correct
26 Correct 8 ms 888 KB Output is correct
27 Correct 7 ms 888 KB Output is correct
28 Correct 8 ms 888 KB Output is correct
29 Correct 7 ms 888 KB Output is correct
30 Correct 7 ms 888 KB Output is correct
31 Correct 7 ms 888 KB Output is correct
32 Correct 7 ms 888 KB Output is correct
33 Execution timed out 2089 ms 66260 KB Time limit exceeded
34 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 888 KB Output is correct
2 Correct 7 ms 888 KB Output is correct
3 Correct 7 ms 888 KB Output is correct
4 Correct 7 ms 888 KB Output is correct
5 Correct 7 ms 888 KB Output is correct
6 Correct 8 ms 888 KB Output is correct
7 Correct 7 ms 892 KB Output is correct
8 Correct 8 ms 888 KB Output is correct
9 Correct 8 ms 888 KB Output is correct
10 Correct 7 ms 888 KB Output is correct
11 Correct 5 ms 376 KB Output is correct
12 Correct 5 ms 376 KB Output is correct
13 Correct 5 ms 376 KB Output is correct
14 Correct 5 ms 376 KB Output is correct
15 Correct 5 ms 376 KB Output is correct
16 Correct 5 ms 376 KB Output is correct
17 Correct 5 ms 380 KB Output is correct
18 Correct 5 ms 376 KB Output is correct
19 Correct 5 ms 376 KB Output is correct
20 Correct 6 ms 376 KB Output is correct
21 Correct 7 ms 888 KB Output is correct
22 Correct 8 ms 888 KB Output is correct
23 Correct 8 ms 888 KB Output is correct
24 Correct 8 ms 888 KB Output is correct
25 Correct 8 ms 888 KB Output is correct
26 Correct 8 ms 888 KB Output is correct
27 Correct 7 ms 888 KB Output is correct
28 Correct 8 ms 888 KB Output is correct
29 Correct 7 ms 888 KB Output is correct
30 Correct 7 ms 888 KB Output is correct
31 Correct 7 ms 888 KB Output is correct
32 Correct 7 ms 888 KB Output is correct
33 Execution timed out 2089 ms 66260 KB Time limit exceeded
34 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 7 ms 888 KB Output isn't correct
2 Halted 0 ms 0 KB -