zoukankan      html  css  js  c++  java
  • 模板 数据结构

    双向链表

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 const int maxn=100000+15;
     5 int pre[maxn],nex[maxn];
     6 bool boo[maxn];
     7 int n,m;
     8 int main()
     9 {
    10     scanf("%d",&n);
    11     for (int i=1;i<=n;i++) pre[i]=nex[i]=0;
    12     for (int i=2;i<=n;i++)
    13     {
    14         int k,p;
    15         scanf("%d%d",&k,&p);
    16         if (p==0)
    17         {
    18             pre[i]=pre[k];
    19             nex[i]=k;
    20             pre[k]=i;
    21             nex[pre[i]]=i;
    22         }
    23         else
    24         {
    25             nex[i]=nex[k];
    26             pre[i]=k;
    27             nex[k]=i;
    28             pre[nex[i]]=i;
    29         }
    30     }
    31     scanf("%d",&m);
    32     for (int i=1;i<=m;i++)
    33     {
    34         int x;
    35         scanf("%d",&x);
    36         if (boo[x]) continue;
    37         boo[x]=true;
    38         n--;
    39         pre[nex[x]]=pre[x];
    40         nex[pre[x]]=nex[x];
    41     }
    42     int now=0;
    43     for (int i=1;i<=n;i++)
    44     {
    45         now=nex[now];
    46         if (i<n) printf("%d ",now);
    47          else printf("%d
    ",now);
    48     }
    49     return 0;
    50 }
     1 #include<cstdio>
     2 #include<cstring>
     3 #define MAXN 100005
     4 using namespace std;
     5 int n;
     6 bool vis[MAXN];
     7 struct queue{
     8     int l,r,no; 
     9 }q[MAXN];
    10 int main(){
    11     scanf("%d",&n);
    12     q[1]=(queue){0,0,1};
    13     for(int i=2;i<=n;i++){
    14         int k,p;scanf("%d%d",&k,&p);
    15         if(p==0){
    16             q[i].l=q[k].l;q[i].r=k;
    17             q[q[i].l].r=i;
    18             q[q[i].r].l=i;
    19         }
    20         else {
    21             q[i].l=k;q[i].r=q[k].r;
    22             q[q[i].l].r=i;
    23             q[q[i].r].l=i;
    24         }
    25         q[i].no=i;
    26     }
    27     int m;scanf("%d",&m);
    28     memset(vis,0,sizeof(vis));
    29     while(m--){
    30         int x;scanf("%d",&x);
    31         if(vis[x]) continue;
    32         q[q[x].l].r=q[x].r;
    33         q[q[x].r].l=q[x].l;
    34         vis[x]=true;
    35     }
    36     int now=q[0].r;
    37     while(now){
    38         printf("%d ",q[now].no);
    39         now=q[now].r;
    40     }
    41     return 0;
    42 }
    View Code

    优先队列

     1 #include <queue>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <algorithm>
     5 #include <cmath>
     6 using namespace std;
     7 
     8 const int maxn=10000+15;
     9 int n,m;
    10 int a[maxn],b[maxn],c[maxn];
    11 struct Node
    12 {
    13     int key,x,y;
    14     Node(int key=0,int x=0,int y=0):key(key),x(x),y(y) {}
    15 };
    16 const bool operator < (const Node &a,const Node &b)
    17 {
    18     return a.key>b.key;
    19 }
    20 priority_queue <Node> que;
    21 int f(int x,int y)
    22 {
    23     return a[x]*y*y+b[x]*y+c[x];
    24 }
    25 int main()
    26 {
    27     scanf("%d%d",&n,&m);
    28     for (int i=1;i<=n;i++) scanf("%d%d%d",&a[i],&b[i],&c[i]);
    29     for (int i=1;i<=n;i++) que.push(Node(f(i,1),i,1));
    30     for (int i=1;i<=m;i++)
    31     {
    32         Node now=que.top();
    33         if (i<m) printf("%d ",now.key);
    34          else printf("%d
    ",now.key);
    35         que.pop();
    36         que.push(Node(f(now.x,now.y+1),now.x,now.y+1));
    37     }
    38     return 0;
    39 }

    并查集

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 const int maxn=200000+15;
     5 int rank[maxn],fa[maxn],n,tot;
     6 map <int ,int > Map;
     7 int found(int x)
     8 {
     9     if (fa[x]==x) return x;
    10     return fa[x]=found(fa[x]);
    11 }
    12 int merge(int x,int y)
    13 {
    14     int fx=found(x),fy=found(y);
    15     if (fx==fy) return 0;
    16     if (rank[fx]==rank[fy]) rank[fx]++;
    17     if (rank[fx]>rank[fy]) fa[fy]=fx;
    18      else fa[fx]=fy;
    19     return 0;
    20 }
    21 int xx[maxn],yy[maxn],sg;
    22 int main()
    23 {
    24     int G;
    25     scanf("%d",&G);
    26     while (G--)
    27     {
    28         scanf("%d",&n);
    29         Map.clear();
    30         tot=0;
    31         sg=0;
    32         for (int i=1;i<=n;i++)
    33         {
    34             int a,b,c;
    35             scanf("%d%d%d",&a,&b,&c);
    36             if (Map.find(a)==Map.end())
    37             {
    38                 tot++;
    39                 Map[a]=tot;
    40                 rank[tot]=0;
    41                 fa[tot]=tot;
    42             }
    43             if (Map.find(b)==Map.end())
    44             {
    45                 tot++;
    46                 Map[b]=tot;
    47                 rank[tot]=0;
    48                 fa[tot]=tot;
    49             }
    50             a=Map[a];
    51             b=Map[b];
    52             if (c==1)
    53             {
    54                 merge(a,b);
    55             }
    56             else
    57             {
    58                 sg++;
    59                 xx[sg]=a;
    60                 yy[sg]=b;
    61             }
    62         }
    63         bool boo=true;
    64         for (int i=1;i<=sg;i++)
    65          if (found(xx[i])==found(yy[i])) boo=false;
    66         if (boo) printf("YES
    ");
    67          else printf("NO
    ");
    68     }
    69     return 0;
    70 }

    RMQ

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 const int maxn=100000+15;
     5 int f[20][maxn],n,m;
     6 int main()
     7 {
     8     scanf("%d",&n);
     9     for (int i=1;i<=n;i++) scanf("%d",&f[0][i]);
    10     int w=(int)(log(n)/log(2));
    11     for (int i=1;i<=w;i++)
    12      for (int j=1;j<=n-(1 << i)+1;j++)
    13       f[i][j]=max(f[i-1][j],f[i-1][j+(1 << (i-1))]);
    14     scanf("%d",&m);
    15     while (m--)
    16     {
    17         int x,y;
    18         scanf("%d%d",&x,&y);
    19         int w=(int)(log(y-x+1)/log(2));
    20         printf("%d
    ",max(f[w][x],f[w][y-(1 << w)+1]));
    21     }
    22     return 0;
    23 }

    树状数组

     1 int lowbit(int x){
     2     return x&-x;
     3 }
     4 int change(int x,int y){
     5     for (;x<=n;x+=lowbit(x)) f[x]+=y;
     6     return 0;
     7 }
     8 int ask(int x){
     9     int ans=0;
    10     for (;x;x-=lowbit(x)) ans+=f[x];
    11     return ans;
    12 }
     1 #include<cstdio>
     2 #include<iostream>
     3 #define MAXN 200005
     4 using namespace std;
     5 int n,m;
     6 int fa1[MAXN],fa2[MAXN];
     7 inline int lowbit(int x){return x&-x;}
     8 inline int add1(int x,int y){
     9     for(;x<=n;x+=lowbit(x)) fa1[x]+=y;
    10     return 0;
    11 }
    12 inline int add2(int x,int y){
    13     for(;x<=n;x+=lowbit(x)) fa2[x]+=y;
    14     return 0;
    15 }
    16 inline int ask1(int x){
    17     int res=0;
    18     for(;x;x-=lowbit(x)) res+=fa1[x];
    19     return res;
    20 }
    21 inline int ask2(int x){
    22     int res=0;
    23     for(;x;x-=lowbit(x)) res+=fa2[x];
    24     return res;
    25 }
    26 inline void add(int x,int y){add1(x,y);add2(x,x*y);}
    27 inline void update(int l,int r,int x){add(l,x);add(r+1,-x);}
    28 inline int sum(int x){return (x+1)*ask1(x)-ask2(x);}
    29 inline int que(int l,int r){return sum(r)-sum(l-1);}
    30 inline void fir(){
    31     int l,r,w;scanf("%lld%lld%lld",&l,&r,&w);
    32     update(l,r,w);
    33 }
    34 inline void sec(){
    35     int l,r;scanf("%lld%lld",&l,&r);
    36     int ans=que(l,r);
    37     printf("%lld
    ",ans);
    38 }
    39 int main(){
    40     scanf("%d%d",&n,&m);int a;
    41     for(int i=1;i<=n;i++) scanf("%lld",&a),update(i,i,a);
    42     while(m--){
    43         char opt;cin>>opt;
    44         if(opt=='A') fir();
    45         if(opt=='Q') sec();
    46     }
    47 }
    区间修改
  • 相关阅读:
    正能量
    战略定位
    市场营销
    品牌营销
    CSS3圆角,阴影,透明
    iOS开发的22个奇谲巧技
    [设计模式] javascript 之 策略模式
    让网站和APP更具动感的几点建议
    JAVASCRIPT 之escape 介绍
    CSS2.0中最常用的18条技巧
  • 原文地址:https://www.cnblogs.com/drizzly/p/7638774.html
Copyright © 2011-2022 走看看