답안 #339126

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
339126 2020-12-24T16:17:49 Z beksultan04 원숭이와 사과 나무 (IZhO12_apple) C++14
0 / 100
705 ms 262148 KB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define OK puts("OK");
#define NO puts("NO");
#define YES puts("YES");
#define fr first
#define sc second
#define ret return
#define scan1(a) scanf("%lld",&a);
#define scan2(a,b) scanf("%lld %lld",&a, &b);
#define scan3(a,b,c) scanf("%lld %lld %lld",&a,&b,&c);
#define all(s) s.begin(),s.end()
#define allr(s) s.rbegin(),s.rend()
#define pb push_back
#define sz(v) (int)v.size()
#define endi puts("");
const int N = 1e5+12,INF=1e9+7;

struct node{
    int l, r;
    int sum;
    int pus;
    node *bala1, *bala2;
    node(int L, int R){
        bala1 = bala2 = NULL;
        sum=pus=0;
        l = L;
        r = R;
    }
};

void push(node *root){
    if (root->pus == 0)ret ;
    if (root->bala1 != NULL) root->bala1->pus |= root->pus;
    if (root->bala2 != NULL) root->bala2->pus |= root->pus;
    root->sum = (root->r - root->l + 1);
}

void update(node *root, int ql, int qr){
    int mid = (root->l + root->r)>>1;
    if(root->bala1 == NULL)root->bala1 = new node(root->l,mid);
    if(root->bala2 == NULL)root->bala2 = new node(mid+1,root->r);
    push(root);

    if(root->l > qr || root->r < ql)return;
    if(root->l >= ql && root->r <= qr){
        root->pus = 1;
        push(root);
        return;
    }
    update(root->bala1,ql,qr);
    update(root->bala2,ql,qr);
    root-> sum = root->bala1->sum + root->bala2->sum;
}

int get_ans(node *root,int ql,int qr){
    if (ql > root->r || qr < root->l)ret 0;

    int mid = (root->l + root->r)>>1;
    if(root->bala1 == NULL)root->bala1 = new node(root->l,mid);
    if(root->bala2 == NULL)root->bala2 = new node(mid+1,root->r);
    push(root);
    if (qr >= root->r && root->l >= ql)ret root->sum;
    ret get_ans(root->bala1,ql,qr) + get_ans(root->bala2,ql,qr);
}


main(){
    int n,m,i,ans=0;
    scan1(m)
    node *root = new node(1, 1e9+1);

    while (m--){
        int l, r;
        char c;
        cin>>c>>l>>r;
        if (c == '2'){
            update(root,l+ans,r+ans);
        }
        else {
            ans = get_ans(root,l+ans,r+ans);
            cout <<ans<<"\n";

        }
    }
}

Compilation message

apple.cpp:70:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   70 | main(){
      |      ^
apple.cpp: In function 'int main()':
apple.cpp:71:9: warning: unused variable 'n' [-Wunused-variable]
   71 |     int n,m,i,ans=0;
      |         ^
apple.cpp:71:13: warning: unused variable 'i' [-Wunused-variable]
   71 |     int n,m,i,ans=0;
      |             ^
apple.cpp:11:23: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   11 | #define scan1(a) scanf("%lld",&a);
      |                  ~~~~~^~~~~~~~~~~
apple.cpp:72:5: note: in expansion of macro 'scan1'
   72 |     scan1(m)
      |     ^~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 37 ms 10988 KB Output is correct
5 Correct 48 ms 13420 KB Output is correct
6 Correct 46 ms 12908 KB Output is correct
7 Correct 47 ms 13292 KB Output is correct
8 Correct 334 ms 102252 KB Output is correct
9 Correct 657 ms 177516 KB Output is correct
10 Correct 674 ms 196460 KB Output is correct
11 Correct 690 ms 211308 KB Output is correct
12 Correct 705 ms 217580 KB Output is correct
13 Correct 678 ms 251884 KB Output is correct
14 Correct 674 ms 254700 KB Output is correct
15 Runtime error 535 ms 262148 KB Execution killed with signal 9 (could be triggered by violating memory limits)
16 Halted 0 ms 0 KB -