求助
  • 板块学术版
  • 楼主1kri
  • 当前回复12
  • 已保存回复12
  • 发布时间2020/5/3 08:01
  • 上次更新2023/11/7 03:18:57
查看原帖
求助
235926
1kri楼主2020/5/3 08:01

这题,链表全部RE,debug 0.5h 无果...

#include <iostream>
#include <cstdio>
#define mod 1000000007
using namespace std;
int n,m,tot,opt,x,y,z,a[1000005],size[1000005],tag[1000005],first[1000005],_end[1000005],nxt[1000005],pre[1000005];
int main(){
freopen("problem2.in","r",stdin);
freopen("problem2.out","w",stdout);
    cin>>n>>m;
    for (int i=1;i<=m;i++){
        scanf("%d",&opt);
        if (opt==1){
            scanf("%d%d",&x,&y);
            size[x]++;
            if (first[x]==0){
                ++tot;
                a[tot]=y;
                first[x]=tot,_end[x]=tot;
            }
            else{
                ++tot;
                a[tot]=y;
                int fi=first[x];
                first[x]=tot;
                nxt[first[x]]=fi,pre[fi]=first[x];
            }
        }
        if (opt==2){
            scanf("%d",&x);
            size[x]--;
            printf("%d\n",(a[first[x]]+tag[x])%mod);
            int fi=first[x];
            first[x]=nxt[fi];
            pre[first[x]]=0;
            pre[fi]=nxt[fi]=0;
            if (first[x]==0)_end[x]=0;
        }
        if (opt==3){
            scanf("%d%d",&x,&y);
            size[x]++;
            if (_end[x]==0){
                ++tot;
                a[tot]=y;
                _end[x]=tot,first[x]=tot;
            }
            else{
                ++tot;
                a[tot]=y;
                int en=_end[x];
                _end[x]=tot;
                pre[_end[x]]=en,nxt[en]=_end[x];
            }
        }
        if (opt==4){
            scanf("%d",&x);
            if (size[x]==0)continue;
            size[x]--;
            printf("%d\n",(a[_end[x]]+tag[x])%mod);
            int en=_end[x];
            _end[x]=pre[en];
            nxt[_end[x]]=0;
            pre[en]=nxt[en]=0;
            if (_end[x]==0)first[x]=0;
        }
        if (opt==5){
            scanf("%d%d",&x,&y);
            tag[x]+=y;
            tag[x]%=mod;
        }
        if (opt==6){
            scanf("%d%d",&x,&y);
            if (size[x]<size[y]){
                int delta=tag[y]-tag[x];
                tag[x]=tag[y];
                for (int j=first[x];j;j=nxt[j])
                    a[j]-=delta,a[j]=(a[j]+mod)%mod;
            }
            else{
                int delta=tag[x]-tag[y];
                tag[y]=tag[x];
                for (int j=first[y];j;j=nxt[j])
                    a[j]-=delta,a[j]=(a[j]+mod)%mod;
            }
            if (first[x]==0){
                first[x]=first[y];
                _end[x]=_end[y];
            }
            else nxt[_end[x]]=first[y],pre[first[y]]=_end[x];
            size[x]+=size[y];
            first[y]=_end[y]=size[y]=tag[y]=0;
        }
    }
    return 0;
}
2020/5/3 08:01
加载中...