隐藏页面特效

pb_ds(平板电视)整理

 

  有人说BZOJ3040用普通的<queue>中priority_queue搞dijkstra过不了。

我只想说你们的djk可能写的太丑了。

先上代码

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<ext/pb_ds/priority_queue.hpp> #define pir pair<ll,int> using namespace std; typedef long long ll; //typedef std::priority_queue<pir,vector<pir>,greater<pir> > heap; //3840 ms typedef __gnu_pbds::priority_queue<pir,greater<pir> > heap;//默认是pairing_heap_tag //3304 ms const int N=1e6+5,M=1e7+5; const ll INF=1e15; inline int read(){ char c=getchar();int x=0,f=1; while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f; } int n,m,T,rxa,rxc,rya,ryc,rp,a,b; int x,y,z; struct node{ int v,w,next; }e[M]; int cnt,head[N];ll dis[N];bool vis[N]; inline void add(int u,int v,int w){ e[++cnt].v=v;e[cnt].w=w;e[cnt].next=head[u];head[u]=cnt; } heap q; inline void dijkstra(){ int S; for(int i=1;i<=n;i++) dis[i]=INF; dis[S=1]=0; q.push(make_pair(dis[S],S)); while(!q.empty()){ pir t=q.top();q.pop(); int x=t.second; if(vis[x]) continue; vis[x]=1; for(int i=head[x];i;i=e[i].next){ int v=e[i].v; if(!vis[v]&&dis[v]>dis[x]+e[i].w){ dis[v]=dis[x]+e[i].w; q.push(make_pair(dis[v],v)); } } } } int main(){ n=read();m=read(); T=read();rxa=read();rxc=read();rya=read();ryc=read();rp=read(); m=m-T; x=rxc%rp;y=ryc%rp; a=min(x%n+1,y%n+1); b=max(y%n+1,y%n+1); while(T--) add(a,b,100000000-100*a); while(m--) x=read(),y=read(),z=read(),add(x,y,z); dijkstra(); printf("%lld",dis[n]); return 0; }

对比:

 

 

1|0平衡二叉树(Balanced Binary Tree)


SPOJ3273

 

In this problem, you have to maintain a dynamic set of numbers which support the two fundamental operations

  • INSERT(S,x): if x is not in S, insert x into S
  • DELETE(S,x): if x is in S, delete x from S

and the two type of queries

  • K-TH(S) : return the k-th smallest element of S
  • COUNT(S,x): return the number of elements of S smaller than x

Input

  • Line 1: Q (1 ≤ Q ≤ 200000), the number of operations
  • In the next Q lines, the first token of each line is a character I, D, K or C meaning that the corresponding operation is INSERT, DELETE, K-TH or COUNT, respectively, following by a whitespace and an integer which is the parameter for that operation.

If the parameter is a value x, it is guaranteed that 0 ≤ |x| ≤ 109. If the parameter is an index k, it is guaranteed that 1 ≤ k ≤ 109.

Output

For each query, print the corresponding result in a single line. In particular, for the queries K-TH, if k is larger than the number of elements in S, print the word 'invalid'.

Example

Input 8 I -1 I -1 I 2 C 0 K 2 D -1 K 1 K 2 Output 1 2 2 invalid
#include<cstdio> #include<ext/pb_ds/assoc_container.hpp> //pb_ds库这次内置了红黑树(red-black tree)、伸展树(splay tree)和排序向量树(ordered-vector tree,没找到通用译名,故自行翻译)。 //这些封装好的树都支持插入(insert)、删除(erase)、求kth(find_by_order)、求rank(order_of_key)操作,O(logn)内完成 using namespace std; using namespace __gnu_pbds; int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } tree<int,null_mapped_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>bbt; //SPOJG++版本稍旧(4.3.2),需要写成null_mapped_type才可以(高级版本可以写null_type) char in(){ for(char ch=getchar();;ch=getchar()) if(ch>='A'&&ch<='Z') return ch; } int main(){ char c;int x; for(int T=read();T--;){ c=in();x=read(); if(c=='I'){ bbt.insert(x); } else if(c=='D'){ bbt.erase(x); } else if(c=='K'){ if(x<=bbt.size()) printf("%d\n",*bbt.find_by_order(x-1)); else puts("invalid"); } else{ printf("%d\n",bbt.order_of_key(x)); } } return 0; }

 BZOJ3224: Tyvj 1728 普通平衡树

 

#include<cstdio> #include<ext/pb_ds/assoc_container.hpp> #include<ext/pb_ds/tree_policy.hpp> #pragma GCC optimize("02") using namespace std; using namespace __gnu_pbds; typedef long long ll; ll read(){ ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } typedef __gnu_pbds::tree<ll,null_mapped_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update> T; T bbt;ll ans; int main(){ ll n=read(); for(ll i=1,o,k;i<=n;i++){ o=read();k=read(); if(o==1) bbt.insert((k<<20)+i);else if(o==2) bbt.erase(bbt.lower_bound(k<<20));else if(o==3) printf("%d\n",bbt.order_of_key(k<<20)+1);else { if(o==4) ans=*bbt.find_by_order(k-1);else if(o==5) ans=*--bbt.lower_bound(k<<20);else if(o==6) ans=*bbt.lower_bound((k+1)<<20); printf("%lld\n",ans>>20); } } return 0; }

 


__EOF__

本文作者shenben
本文链接https://www.cnblogs.com/shenben/p/6291080.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   神犇(shenben)  阅读(2316)  评论(4编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示