迷之WA

P2584 [ZJOI2006] GameZ游戏排名系统

我的pbds怎么好好的? ```cpp #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/hash_policy.hpp> #include <ext/pb_ds/tree_policy.hpp> #include <ext/pb_ds/priority_queue.hpp> #include <ext/pb_ds/trie_policy.hpp> #define endl '\n' #define For(it,c) for(__typeof(c.begin()) it=c.begin();it!=c.end();it++) using namespace std; using namespace __gnu_pbds; namespace use_hash { typedef gp_hash_table<string,int> gp_map; typedef tree<pair<int,int>,null_type,less<pair<int,int> >,rb_tree_tag,tree_order_statistics_node_update> rb_tree; const int MAX_N=500005; int n,val[MAX_N],cnt,tot; gp_map mp; string ss[MAX_N]; rb_tree T; pair<int,int> get_val(int x) { return make_pair(-val[x],x); } int main() { cin>>n; char c; string s; int tp; while(n--) { cin>>c>>s; if(c=='+') { if(mp[s]) { tp=mp[s]; T.erase(get_val(tp)); tot--; } mp[s]=++cnt; cin>>val[cnt]; T.insert(get_val(cnt)); tot++; ss[cnt]=s; } else if(c=='?' && !isdigit(s[0])) { int x=mp[s]; cout<<T.order_of_key(get_val(x))+1<<endl; } else { int x=0; for(int i=0;i<(int)s.size();i++) { x=(x<<3)+(x<<1)+(s[i]^48); } tp=min(tot,x+9); for(int i=x-1;i<tp;i++) { cout<<ss[T.find_by_order(i)->second]<<' '; } cout<<endl; } } return 0; } } namespace use_tree { typedef tree<pair<int,int>,null_type,greater<pair<int,int> >,rb_tree_tag,tree_order_statistics_node_update> rb_tree; rb_tree T,TE; int n,m,k,s,q,ans; string str; int main() { cin>>n>>m; while(n--) { cin>>str>>k; if(str=="I") { k+=s; if(k>=m)T.insert(make_pair(k,n)); } else if(str=="A") { m-=k; s-=k; } else if(str=="S") { m+=k; s+=k; T.split(make_pair(m,-1),TE); ans+=TE.size(); } else if(str=="F") { if(k>(int)T.size())cout<<-1<<endl; else cout<<T.find_by_order(k-1)->first-s<<endl; } } cout<<ans<<endl; return 0; } } namespace use_trie//P3879 { typedef trie<string,null_type,trie_string_access_traits<>,pat_trie_tag,trie_prefix_search_node_update> pat_trie; const int MAX_N=10005; pat_trie Trie[MAX_N]; int n,m; string str[MAX_N]; int main() { cin>>n; for(int i=1;i<=n;i++) { int L; cin>>L; for(int j=0;j<L;j++) { string s; cin>>s; Trie[i].insert(s); } } cin>>m; for(int i=1;i<=m;i++)cin>>str[i]; for(int i=1;i<=m;i++) { string s=str[i]; for(int j=1;j<=n;j++) { if(Trie[j].find(s)!=Trie[j].end())cout<<j<<" "; } cout<<endl; } return 0; } } namespace use_heap//P3377 { typedef __gnu_pbds::priority_queue<pair<int,int>,greater<pair<int,int> >,pairing_heap_tag> heap; const int MAX_N=100005; bool used[MAX_N]; heap q[MAX_N]; int n,m; int fa[MAX_N]; int find(int i) { return fa[i]==i?i:fa[i]=find(fa[i]); } void unite(int u,int v) { fa[find(u)]=find(v); } bool same(int u,int v) { return find(u)==find(v); } int main() { cin>>n>>m; for(int i=1;i<=n;i++) { fa[i]=i; int x; cin>>x; q[i].push(make_pair(x,i)); } while(m--) { int opt; cin>>opt; if(opt==1) { int u,v; cin>>u>>v; if(same(u,v))continue; if(used[u] || used[v])continue; q[find(u)].join(q[find(v)]); unite(v,u); } else { int x; cin>>x; if(used[x]) { cout<<-1<<endl; continue; } int f=find(x); pair<int,int> t=q[f].top(); q[f].pop(); cout<<t.first<<endl; used[t.second]=true; } } return 0; } } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); use_hash::main(); return 0; } ```
by Smile_Cindy @ 2019-06-02 10:52:51


@[Alpha](/space/show?uid=87058) 我手写的平衡树(捂脸)。。。
by zzy2333 @ 2019-06-02 10:54:45


是我自己的问题,数据没有问题。。。再看看怎么回事吧
by zzy2333 @ 2019-06-02 11:18:06


@[zzy2333](/space/show?uid=118058) 可能 有问题 我多splay 了几次就wa了,可能 又不平衡导致爆栈了?
by chdy @ 2019-08-20 13:58:46


这 wa 的就很迷了
by chdy @ 2019-08-20 13:58:56


@[chdy](/space/show?uid=59688) 我的是读入的问题,开始用getchar读结果双倍经验数据没行末空格,这题有,然后就爆炸,换成scanf就A了。
by zzy2333 @ 2019-08-20 14:19:29


|