为啥这会超时?
查看原帖
为啥这会超时?
1122530
elpsconr楼主2024/11/13 15:15

理论上跑满也就 9×1079 \times 10^7竟然跑不进一点五秒?

/*
   卫风·芄兰
芄兰之支,童子佩觿.
虽则佩觿,能不我知?
容兮遂兮,垂带悸兮.
芄兰之叶,童子佩韘.
虽则佩韘,能不我甲?
容兮遂兮,垂带悸兮.
*/
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define PII pair<int,int>
#define tul tuple<int,int,int>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define rep_(i,a,b) for(int i=a;i>=b;--i)
#define all(x) x.begin(),x.end()
#define bp(x) __builtin_popcountll(x)
#define ctz(x) __builtin_ctzll(x)
#define cy cout<<"YES"<<endl
#define cn cout<<"NO"<<endl
#define lc (rt<<1)
#define rc (rt<<1|1)
mt19937_64 rnd(time(0));
const int N=3e5+5,yyx=1e9+7;
vector<PII> to[N];
int n,m,a[N];
inline int mod(int x){
  return (x%yyx+yyx)%yyx;
}
inline int cmin(int &x,int y){
  return x>y?x=y,1:0;
}
inline int cmax(int &x,int y){
  return x<y?x=y,1:0;
}
vector<int> mp,vt;
int f;
void dfs(int x){
    if(x<=0){
        f=1;return;
    }
    rep_(j,x-1,0){
       if(!mp[j]){
        dfs(j);
       }
       else if(mp[j]==1) mp[j]=0;
       else if(mp[j]>=2){
        mp[j]-=2;return;
       }
    }
}
inline void solve(){
  cin>>m;
  mp.resize(35,0);
  vt.resize(35,0);
  f=0;
  rep(i,1,m){
    int t,v;cin>>t>>v;
    if(t==1){
        mp[v]++;vt[v]++;
        //cout<<v<<endl;
    }
    else{
      int ok=0;
      mp=vt;
      rep_(i,31,0){
        if(v>>i&1){
            if(!mp[i]){
                auto vp=mp;
                rep(j,1,i){
                    vp[j]+=vp[j-1]/2;
                    //cout<<vp[j]<<" "<<vp[j-1]<<" "<<j<<endl;
                }
                if(!vp[i]){
                    ok=1;break;
                }
                // if(v==3){
                //     cout<<i<<endl;
                //     for(auto [x,y]:mp){
                //         if(!y) continue;
                //         cout<<x<<" "<<y<<endl;
                //     }
                // }
                dfs(i);
                if(f){
                    ok=1;break;
                }
                // if(v==3){
                //     for(auto [x,y]:mp){
                //         if(!y) continue;
                //         cout<<x<<" jj "<<y<<endl;
                //     }
                //     cout<<endl;
                // }
            }
        }
      }
      if(ok) cn;//cout<<"NO "<<v<<endl;
      else cy;//cout<<"YES "<<v<<endl;
    }
  }
}
signed main(){
  cin.tie(0)->sync_with_stdio(0);
  //freopen("D://321//in.txt","r",stdin);
  //freopen("D://321//out.txt","w",stdout);
  int _=1;
  //cin>>_;
  while(_--)
  solve();
  return 0;
}
2024/11/13 15:15
加载中...