Submission #71263

#TimeUsernameProblemLanguageResultExecution timeMemory
71263khohko매트 (KOI15_mat)C++17
100 / 100
657 ms158084 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3") using namespace std; #define ll int #define pb push_back #define fr first #define sc second #define MAX ((ll)(1e9+100)) #define MX ((ll)(1e6+100)) #define ARRS ((ll)(2e6+100)) #define HS ((ll)(1049)) #define MOD ((ll)(1000000861)) #define EP ((double)(1e-9)) #define LG 21 #define mul(a,b) a=((a)*(b))%MOD using namespace std; string s,t; vector<pair<pair<ll,ll> ,pair<ll,ll> > > a; vector<pair<pair<ll,ll> ,pair<ll,ll> > > b; ll dp[4100][4100]; // //struct node{ // node *L,*R; // ll x; // node(){ // L=R=NULL; // x=-MAX; // } // void updt(){ // x=-MAX; // if(L)x=max(x,L->x); // if(R)x=max(x,R->x); // } //}; // //ll wl,wr,wi,wx; //void updt(ll l,ll r,node *& x){ // if(wi<l||r-1<wi)return; // if(!x)x=new node(); // if(l==r-1){ // x->x=max(x->x,wx); // return; // } // updt(l,l+r>>1,x->L); // updt(l+r>>1,r,x->R); // x->updt(); //} // //ll quer(ll l,ll r,node *& x){ // if(wr<l||r-1<wl)return -MAX; // if(!x)return -MAX; // if(wl<=l&r-1<=wr)return x->x; // return max(quer(l,l+r>>1,x->L), // quer(l+r>>1,r,x->R)); //} // //node *rtl[4000]; //node *rtr[4000]; ll fw[2][3010][6020]; //ll fw2[3010][6020]; void add(ll wa,ll w,ll i,ll x){ i++; while(i<=6010){ fw[wa][w][i]=max(fw[wa][w][i],x); i+=i&-i; } } ll quer(ll wa,ll w,ll i){ ll p=-MAX; i++; while(i>1){ p=max(p,fw[wa][w][i]); i-=i&-i; } return p; } map<ll,ll> mp; int main(){ #ifdef KHOKHO freopen("in.in","r",stdin); freopen("out.out","w",stdout); #endif ll n,w,l,r,d,k,c; cin>>n>>w; a.pb({{0,0},{0,0}}); b.pb({{0,0},{w,0}}); mp[0]=1; mp[w]=1; for(int i=0; i<n; i++){ cin>>k; if(k){ cin>>l>>r>>d>>c; mp[l]=1; mp[r]=1; a.pb({{l,r},{d,c}}); } else { cin>>l>>r>>d>>c; mp[l]=1; mp[r]=1; b.pb({{l,r},{w-d,c}}); } } ll C=1; for(auto x:mp) mp[x.fr]=C++; //C+=100; C+=2; for(auto &x:a){ x.fr.fr=mp[x.fr.fr]; x.fr.sc=mp[x.fr.sc]; } for(auto &x:b){ x.fr.fr=mp[x.fr.fr]; x.fr.sc=mp[x.fr.sc]; } sort(a.begin(),a.end()); sort(b.begin(),b.end()); for(int i=0; i<=a.size(); i++) for(int j=0; j<=b.size(); j++) dp[i][j]=-MAX; for(int i=0; i<=3005; i++){ for(int j=0; j<=C; j++){ fw[0][i][j]=-MAX; fw[1][i][j]=-MAX; } } dp[0][0]=0; ll pas=0; for(int i=0; i<a.size(); i++){ for(int j=0; j<b.size(); j++){ if(b[j].fr.fr<=a[i].fr.fr&&(a[i].fr.fr>=b[j].fr.sc||a[i].sc.fr<=b[j].sc.fr)){ ll k=quer(1,j,a[i].fr.fr); dp[i][j]=max(dp[i][j],k+a[i].sc.sc); } if(b[j].fr.fr>=a[i].fr.fr&&(b[j].fr.fr>=a[i].fr.sc||a[i].sc.fr<=b[j].sc.fr)){ ll k=quer(0,i,b[j].fr.fr); dp[i][j]=max(dp[i][j],k+b[j].sc.sc); } add(1,j,a[i].fr.sc,dp[i][j]); add(0,i,b[j].fr.sc,dp[i][j]); pas=max(pas,dp[i][j]); } } cout<<pas; }

Compilation message (stderr)

mat.cpp: In function 'int main()':
mat.cpp:125:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<=a.size(); i++)
               ~^~~~~~~~~~
mat.cpp:126:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int j=0; j<=b.size(); j++)
                ~^~~~~~~~~~
mat.cpp:138:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<a.size(); i++){
               ~^~~~~~~~~
mat.cpp:139:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int j=0; j<b.size(); j++){
                ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...