답안 #65479

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
65479 2018-08-07T16:44:00 Z edisonhello 게임 (IOI13_game) C++14
63 / 100
4582 ms 191456 KB
#include "game.h"
#include<bits/stdc++.h>
 
#define ll int_fast64_t
 
using namespace std;
 
ll gcd(ll a,ll b){
    while(b){
        a%=b; swap(a,b);
    } return a;
}
 
struct treap{
    int l,r;
    ll v,g;
    int pri,key;
    void pull();
    // treap(int x,ll v):l(0),r(0),v(v),g(v),pri(rand()),key(x){}
} ts[30*10000];
void treap::pull(){ g=gcd(gcd(l?ts[l].g:0,r?ts[r].g:0),v); }
int gettreap(int x,ll v){
    static int ptr=1;
    ts[ptr].key=x;
    ts[ptr].v=ts[ptr].g=v;
    return ptr++;
}

int merge(int a,int b){
    if(!a)return b; if(!b)return a;
    if(ts[a].pri>ts[b].pri){
        ts[a].r=merge(ts[a].r,b);
        ts[a].pull();
        return a;
    }
    else{
        ts[b].l=merge(a,ts[b].l);
        ts[b].pull();
        return b;
    }
}
void split(int now,int key,int &a,int &b){
    if(!now){ a=b=0; return; }
    if(ts[now].key<=key){
        a=now;
        split(ts[now].r,key,ts[a].r,b);
        ts[a].pull();
    }
    else{
        b=now;
        split(ts[now].l,key,a,ts[b].l);
        ts[b].pull();
    }
}
 
struct nodey{
    int l,r,root;
    ll g;
    void pull();
    // void pull(){ g=gcd(l?l->g:0,r?r->g:0); return; }
} ys[30*30*10000];

void nodey::pull(){ g=gcd(l?ys[l].g:0,r?ys[r].g:0); }
 
struct nodex{
    int l,r,root;
} xs[30*10000];
int root,xptr,yptr;
 
int x,y;
 
void init(int R, int C){
    x=R; y=C;
}
 
#define mid ((l+r)>>1)
void modifyy(int &now,int l,int r,int xtag,int my,ll v){
    if(!now)now=++yptr;
    if(l==r){
        int a,b,c,d;
        split(ys[now].root,xtag-1,a,d);
        split(d,xtag,b,c);
        if(b)ts[b].v=ts[b].g=v;
        else b=gettreap(xtag,v);
        ys[now].root=merge(merge(a,b),c);
        ys[now].g=ts[ys[now].root].g;
        return;
    }
    if(my<=mid)modifyy(ys[now].l,l    ,mid,xtag,my,v);
    else       modifyy(ys[now].r,mid+1,r  ,xtag,my,v);
    ys[now].pull();
}
void modifyx(int &now,int l,int r,int mx,int my,ll v){
    if(!now)now=++xptr;
    modifyy(xs[now].root,0,y-1,mx,my,v);
    if(l==r)return;
    if(mx<=mid)modifyx(xs[now].l,l    ,mid,mx,my,v);
    else       modifyx(xs[now].r,mid+1,r  ,mx,my,v);
}
void update(int p, int q, long long v){
    modifyx(root,0,x-1,p,q,v);
}
 
ll query(int now,int l,int r,int yl,int yr){
    if(yr<l || r<yl || !now)return 0;
    if(yl<=l&&r<=yr)return ys[now].g;
    return gcd(query(ys[now].l,l    ,mid,yl,yr),
               query(ys[now].r,mid+1,r  ,yl,yr));
}
ll query(int now,int l,int r,int xl,int xr,int yl,int yr){
    // cout<<"querying x range "<<l<<" to "<<r<<" , xl and xr: "<<xl<<" "<<xr<<endl;
    if(xr<l || r<xl || !now)return 0;
    if(xl<=l&&r<=xr){
        ll Q=query(xs[now].root,0,y-1,yl,yr);
        // cout<<"x range "<<l<<" to "<<r<<" query "<<yl<<" to "<<yr<<" get "<<Q<<endl;
        return Q;
    }
    return gcd(query(xs[now].l,l    ,mid,xl,xr,yl,yr),
               query(xs[now].r,mid+1,r  ,xl,xr,yl,yr));
}
long long calculate(int x1, int y1, int x2, int y2){
    return query(root,0,x-1,x1,x2,y1,y2);
}

Compilation message

grader.c: In function 'int main()':
grader.c:18:6: warning: variable 'res' set but not used [-Wunused-but-set-variable]
  int res;
      ^~~
game.cpp: In function 'int merge(int, int)':
game.cpp:30:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
     if(!a)return b; if(!b)return a;
     ^~
game.cpp:30:21: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
     if(!a)return b; if(!b)return a;
                     ^~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 248 KB Output is correct
2 Correct 4 ms 612 KB Output is correct
3 Correct 4 ms 640 KB Output is correct
4 Correct 3 ms 640 KB Output is correct
5 Correct 2 ms 640 KB Output is correct
6 Correct 3 ms 640 KB Output is correct
7 Correct 2 ms 640 KB Output is correct
8 Correct 3 ms 652 KB Output is correct
9 Correct 3 ms 768 KB Output is correct
10 Correct 3 ms 768 KB Output is correct
11 Correct 3 ms 768 KB Output is correct
12 Correct 2 ms 768 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 768 KB Output is correct
2 Correct 3 ms 768 KB Output is correct
3 Correct 3 ms 768 KB Output is correct
4 Correct 954 ms 12152 KB Output is correct
5 Correct 764 ms 12632 KB Output is correct
6 Correct 988 ms 12632 KB Output is correct
7 Correct 1063 ms 12632 KB Output is correct
8 Correct 658 ms 12632 KB Output is correct
9 Correct 1067 ms 12632 KB Output is correct
10 Correct 963 ms 12632 KB Output is correct
11 Correct 3 ms 12632 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 12632 KB Output is correct
2 Correct 4 ms 12632 KB Output is correct
3 Correct 4 ms 12632 KB Output is correct
4 Correct 3 ms 12632 KB Output is correct
5 Correct 2 ms 12632 KB Output is correct
6 Correct 4 ms 12632 KB Output is correct
7 Correct 3 ms 12632 KB Output is correct
8 Correct 3 ms 12632 KB Output is correct
9 Correct 4 ms 12632 KB Output is correct
10 Correct 3 ms 12632 KB Output is correct
11 Correct 3 ms 12632 KB Output is correct
12 Correct 1769 ms 16868 KB Output is correct
13 Correct 3280 ms 16868 KB Output is correct
14 Correct 537 ms 16868 KB Output is correct
15 Correct 3889 ms 16868 KB Output is correct
16 Correct 374 ms 18116 KB Output is correct
17 Correct 1978 ms 18116 KB Output is correct
18 Correct 3407 ms 18424 KB Output is correct
19 Correct 2980 ms 18536 KB Output is correct
20 Correct 2841 ms 18536 KB Output is correct
21 Correct 3 ms 18536 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 18536 KB Output is correct
2 Correct 3 ms 18536 KB Output is correct
3 Correct 4 ms 18536 KB Output is correct
4 Correct 3 ms 18536 KB Output is correct
5 Correct 4 ms 18536 KB Output is correct
6 Correct 3 ms 18536 KB Output is correct
7 Correct 3 ms 18536 KB Output is correct
8 Correct 3 ms 18536 KB Output is correct
9 Correct 3 ms 18536 KB Output is correct
10 Correct 4 ms 18536 KB Output is correct
11 Correct 4 ms 18536 KB Output is correct
12 Correct 1280 ms 18536 KB Output is correct
13 Correct 808 ms 18536 KB Output is correct
14 Correct 1191 ms 18536 KB Output is correct
15 Correct 1278 ms 18536 KB Output is correct
16 Correct 762 ms 18536 KB Output is correct
17 Correct 1255 ms 18536 KB Output is correct
18 Correct 1184 ms 18536 KB Output is correct
19 Correct 2061 ms 18536 KB Output is correct
20 Correct 3601 ms 18536 KB Output is correct
21 Correct 585 ms 18536 KB Output is correct
22 Correct 4582 ms 18536 KB Output is correct
23 Correct 391 ms 18536 KB Output is correct
24 Correct 2112 ms 18536 KB Output is correct
25 Correct 3846 ms 18536 KB Output is correct
26 Correct 3172 ms 18736 KB Output is correct
27 Correct 2814 ms 18736 KB Output is correct
28 Execution timed out 1183 ms 191456 KB Time limit exceeded (wall clock)
29 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 191456 KB Output is correct
2 Correct 4 ms 191456 KB Output is correct
3 Correct 5 ms 191456 KB Output is correct
4 Correct 2 ms 191456 KB Output is correct
5 Correct 3 ms 191456 KB Output is correct
6 Correct 3 ms 191456 KB Output is correct
7 Correct 2 ms 191456 KB Output is correct
8 Correct 3 ms 191456 KB Output is correct
9 Correct 3 ms 191456 KB Output is correct
10 Correct 3 ms 191456 KB Output is correct
11 Correct 3 ms 191456 KB Output is correct
12 Correct 1238 ms 191456 KB Output is correct
13 Correct 842 ms 191456 KB Output is correct
14 Correct 1103 ms 191456 KB Output is correct
15 Correct 1223 ms 191456 KB Output is correct
16 Correct 769 ms 191456 KB Output is correct
17 Correct 1245 ms 191456 KB Output is correct
18 Correct 1066 ms 191456 KB Output is correct
19 Correct 2086 ms 191456 KB Output is correct
20 Correct 3524 ms 191456 KB Output is correct
21 Correct 587 ms 191456 KB Output is correct
22 Correct 4436 ms 191456 KB Output is correct
23 Correct 425 ms 191456 KB Output is correct
24 Correct 2201 ms 191456 KB Output is correct
25 Correct 3688 ms 191456 KB Output is correct
26 Correct 3173 ms 191456 KB Output is correct
27 Correct 3065 ms 191456 KB Output is correct
28 Execution timed out 1531 ms 191456 KB Time limit exceeded (wall clock)
29 Halted 0 ms 0 KB -