3.18日的总结

来源:互联网 发布:玄幻网络四大名著 编辑:程序博客网 时间:2024/05/13 21:27

丁神真的超级腹黑…而且样例还有错,害得我想了好久它是什么意思,辛辛苦苦(其实也就水水)编了个暴力出来,结果还是直接WA掉了。
数据结构这个东西真的超级高端,然而我却仿佛没学过一样,好多题看到数据范围知道:啊这是数据结构的数据,然后……就没有然后了。简直垃圾到不行。
今天第一道题可以用树状数组来做,之前一直觉得自己树状数组学的还行,然而还是直接蒙蔽在那了。
1。求逆序对之和

#include<cstdio>#include<cstring>#include<algorithm>#define N 1000010#define ll long longusing namespace std;int n;int a[N*2],c[N*2];ll ans=0,cnt=0;int lowbit(int x){    return x&(-x);}void modify(int x,int delta){    while(x<=n){        c[x]+=delta;        x+=lowbit(x);    }}int query(int x){    int rt=0;    while(x){        rt+=c[x];        x-=lowbit(x);    }    return rt;}int main(){    freopen("rotinv.in","r",stdin);    freopen("rotinv.out","w",stdout);    scanf("%d",&n);    for(int i=1;i<=n;i++){        scanf("%d",&a[i]);        a[n+i]=a[i];    }    for(int i=1;i<=n;i++){        cnt+=(i-1)-query(a[i]);        modify(a[i],1);    }    for(int i=n+1;i<=n*2;i++){        modify(a[i-n],-1);        cnt+=(n-1)-query(a[i]);        cnt-=query(a[i-n]-1);        modify(a[i],1);        ans+=cnt;    }    printf("%I64d",ans);    return 0;}

【其实我现在都还不怎么理解这个】【误】
2。 rise

#include<cstdio>#include<cstring>#include<algorithm>#define N 100010using namespace std;int n,m,tot=0;int a[N],head[N],q[N],b[N];struct node{    int pre,to;}edge[N];void adde(int from,int to){    tot++;    edge[tot].pre=head[from];    edge[tot].to=to;    head[from]=tot;}int dfs(int u,int r){    for(int i=head[u];i;i=edge[i].pre){        int v=edge[i].to;        if(v<=r){            dfs(v,r);            tot++;        }    }    return tot;}int main(){    freopen("rise.in","r",stdin);    freopen("rise.out","w",stdout);    scanf("%d%d",&n,&m);    for(register int i=1;i<=n;i++){        scanf("%d",&a[i]);    }    for(register int i=1;i<=n;i++){        for(register int j=i+1;j<=n;j++){            if(a[j]>a[i]){                adde(i,j);                break;            }        }    }/*  for(int i=1;i<=n;i++){        for(int j=head[i];j;j=edge[j].pre){            printf("%d %d\n",i,edge[j].to);        }    }*/    while(m--){        int u,v;        tot=1;        scanf("%d%d",&u,&v);        printf("%d\n",dfs(u,v));    }    return 0;}

这个好像再深入一点也是一个数据结构吗,那些比较吊的东西就大概知道就行了……用链表来存还是比较巧妙的。
暴力写得好也是挺好的。
3。 seqmod
好恶心啊这道题……强行用丁神的有序链剖来搞(假装我知道有序链剖是个啥)
没有编出来,没有代码。。。
数据结构真的需要好好补补了。
【说得就跟还有救一样】

0 0