제출 #13793

#제출 시각아이디문제언어결과실행 시간메모리
13793gs14004코끼리 (Dancing Elephants) (IOI11_elephants)C++14
컴파일 에러
0 ms0 KiB
#include <cstdio> #include <cstring> #include <algorithm> #include <vector> using namespace std; const int U = 1; // 400 ~ 1500 const int B = 1500; // 400 ~ 1500 struct elem{ int val; int next; int cnt; }; bool operator<(elem a, elem b){ return a.val < b.val; } vector<elem> bucket[105]; int sentinel; int b[150005]; int a[150005], n, l; int q_cnt; void make_arr(){ int piv = 0; for (int i=0; i<sentinel; i++) { for (int j=0; j<bucket[i].size(); j++) { a[piv++] = bucket[i][j].val; } } } void bucket_clear(){ for (int i=0; i<sentinel; i++) { bucket[i].clear(); int piv = min(n-i*B,B); int pt = piv; bucket[i].resize(piv); for (int j=i*B+piv-1; j>=i*B; j--) { while (pt && b[i*B+pt-1] > b[j] + l) pt--; if(pt == piv){ bucket[i][j-i*B].val = b[j]; bucket[i][j-i*B].next = -1; bucket[i][j-i*B].cnt = 0; } else{ bucket[i][j-i*B].val = b[j]; if(bucket[i][pt].next == -1){ bucket[i][j-i*B].next = pt; } else{ bucket[i][j-i*B].next = bucket[i][pt].next; } bucket[i][j-i*B].cnt = bucket[i][pt].cnt + 1; } } } } void single_bucket_update(int buck_num, int pos, int val){ } int query(){ int pos = 0, ret = 0; for (int i=0; i<sentinel; ) { if(bucket[i].empty()){ i++; continue; } ret += bucket[i][pos].cnt + 1; if(bucket[i][pos].next != -1) pos = bucket[i][pos].next; int new_buck = i+1; int new_pos = bucket[i][pos].val + l; while (1){ if(new_buck == sentinel) break; if(lower_bound(bucket[new_buck].begin(),bucket[new_buck].end(),(elem){new_pos+1,0,0}) != bucket[new_buck].end()) break; new_buck++; } if(new_buck == sentinel) break; i = new_buck; pos = (int)(lower_bound(bucket[new_buck].begin(),bucket[new_buck].end(),(elem){new_pos+1,0,0}) - bucket[new_buck].begin()); } return ret; } void init(int N, int L, int* X){ memcpy(a,X,sizeof(int) * N); n = N; l = L; while (sentinel * B < n) sentinel++; bucket_clear(); } int update(int i, int y){ q_cnt = (q_cnt + 1) % U; int o = a[i]; a[i] = y; // erase and delete in ordered set if(q_cnt == 0){ // make_arr(); for (int i=0; i<n; i++) { b[i] = a[i]; } sort(b,b+n); bucket_clear(); } return query(); } int main(){ int n,l,m,p[150005]; scanf("%d %d %d",&n,&l,&m); for (int i=0; i<n; i++) { scanf("%d",&p[i]); } init(n,l,p); for (int i=0; i<m; i++) { int a,b; scanf("%d %d",&a,&b); printf("%d\n",update(a,b)); } }

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

elephants.cpp: In function ‘void make_arr()’:
elephants.cpp:28:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int j=0; j<bucket[i].size(); j++) {
                        ^
elephants.cpp: In function ‘int update(int, int)’:
elephants.cpp:103:9: warning: unused variable ‘o’ [-Wunused-variable]
     int o = a[i];
         ^
elephants.cpp: In function ‘int main()’:
elephants.cpp:119:31: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d %d",&n,&l,&m);
                               ^
elephants.cpp:121:26: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d",&p[i]);
                          ^
elephants.cpp:126:29: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d %d",&a,&b);
                             ^
/tmp/ccGxDKAA.o: In function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'
/tmp/cc8McElh.o:elephants.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status