제출 #125123

#제출 시각아이디문제언어결과실행 시간메모리
125123AuldLangSyneSterilizing Spray (JOI15_sterilizing)C++14
100 / 100
307 ms5980 KiB
#include <bits/stdc++.h>
#define ll long long
#define f(i, a, b) for(ll i = a; i <= b; ++i)
#define ff(i, a, b) for(ll i = a; i < b; ++i)
#define F(i, a, b) for(ll i = a; i >= b; --i)
#define FF(i, a, b) for(ll i = a; i > b; --i)
#define x first
#define y second
#define X real()
#define Y imag()
using namespace std;
typedef complex<ll> P;
typedef pair<ll, ll> ii;
typedef tuple<ll, ll, ll> iii;

const int N = 1e5+7;
int n, m, k, id, u, v;
ll a[N], node[4*N];

void build(int id, int l , int r){
	if(l == r){
		node[id] = a[r];
		return;
	}
	int mid = (l+r)/2;
	build(2*id, l, mid);
	build(2*id+1, mid+1, r);
	node[id] = node[2*id] + node[2*id+1];
}

void upd_point(int id, int l, int r, int pos, int val){
	if(pos < l || r < pos) return;
	if(l == r){
		node[id] = val;
		return;
	}
	int mid = (l+r)/2;
	upd_point(2*id, l, mid, pos, val);
	upd_point(2*id+1, mid+1, r, pos, val);
	node[id] = node[2*id] + node[2*id+1];
}

void upd_segment(int id, int l, int r, int u, int v){
	if(v < l || r < u || !node[id]) return;
	if(u <= l && r <= v){
		if(l == r){
			node[id] /= k;
			return;	
		}
	}
	int mid = (l+r)/2;
	upd_segment(2*id, l, mid, u, v);
	upd_segment(2*id+1, mid+1, r, u, v);
	node[id] = node[2*id]+node[2*id+1];
}

ll get_ans(int id, int l, int r, int u, int v){
	if(v < l || r < u) return 0;
	if(u <= l && r <= v) return node[id];
	int mid = (l+r)/2;
	return get_ans(2*id, l, mid, u, v) + get_ans(2*id+1, mid+1, r, u, v);
}

signed main(){
	scanf("%d %d %d", &n, &m, &k);
	f(i,1,n){
		scanf("%d", &a[i]);
	}
	build(1,1,n);
	while(m--){
		scanf("%d %d %d", &id, &u, &v);
		if(id == 1){
			upd_point(1,1,n,u,v);
		}else if(id == 2 && k > 1){
			upd_segment(1,1,n,u,v);
		}else if(id == 3){
			printf("%lld\n", get_ans(1,1,n,u,v));
		}
	}
}

컴파일 시 표준 에러 (stderr) 메시지

sterilizing.cpp: In function 'int main()':
sterilizing.cpp:67:20: warning: format '%d' expects argument of type 'int*', but argument 2 has type 'long long int*' [-Wformat=]
   scanf("%d", &a[i]);
               ~~~~~^
sterilizing.cpp:65:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d %d", &n, &m, &k);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
sterilizing.cpp:67:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", &a[i]);
   ~~~~~^~~~~~~~~~~~~
sterilizing.cpp:71:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d %d", &id, &u, &v);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...