Submission #71257

#TimeUsernameProblemLanguageResultExecution timeMemory
71257khohko매트 (KOI15_mat)C++17
0 / 100
79 ms26712 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3") using namespace std; #define ll long long #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]; 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=100000; 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<=a.size(); i++)rtl[i]=NULL; for(int i=0; i<=b.size(); i++)rtr[i]=NULL; 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)){ wl=0; wr=a[i].fr.fr; ll k=quer(0,C,rtr[j]); 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)){ wl=0; wr=b[j].fr.fr; ll k=quer(0,C,rtl[i]); dp[i][j]=max(dp[i][j],k+b[j].sc.sc); } wi=a[i].fr.sc; wx=dp[i][j]; updt(0,C,rtr[j]); wi=b[j].fr.sc; wx=dp[i][j]; updt(0,C,rtl[i]); //cout<<i<<" "<<j<<" "<<dp[i][j]<<endl; pas=max(pas,dp[i][j]); } } cout<<pas; }

Compilation message (stderr)

mat.cpp: In function 'void updt(long long int, long long int, node*&)':
mat.cpp:45:10: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  updt(l,l+r>>1,x->L);
         ~^~
mat.cpp:46:8: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  updt(l+r>>1,r,x->R);
       ~^~
mat.cpp: In function 'long long int quer(long long int, long long int, node*&)':
mat.cpp:53:7: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
  if(wl<=l&r-1<=wr)return x->x;
     ~~^~~
mat.cpp:54:21: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  return max(quer(l,l+r>>1,x->L),
                    ~^~
mat.cpp:55:12: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
      quer(l+r>>1,r,x->R));
           ~^~
mat.cpp: In function 'int main()':
mat.cpp:105:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<=a.size(); i++)
               ~^~~~~~~~~~
mat.cpp:106:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int j=0; j<=b.size(); j++)
                ~^~~~~~~~~~
mat.cpp:108:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<=a.size(); i++)rtl[i]=NULL;
               ~^~~~~~~~~~
mat.cpp:109:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<=b.size(); i++)rtr[i]=NULL;
               ~^~~~~~~~~~
mat.cpp:112:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<a.size(); i++){
               ~^~~~~~~~~
mat.cpp:113: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...