제출 #396389

#제출 시각아이디문제언어결과실행 시간메모리
396389peuch팀들 (IOI15_teams)C++17
컴파일 에러
0 ms0 KiB
#include "teams.h" #include <stdio.h> #include <stdlib.h> #include "teams.h" #include<bits/stdc++.h> using namespace std; const int MAXN = 5e5 + 10; int n; pair<int, int> v[MAXN]; int bank[MAXN]; int m; int k[MAXN]; vector<int> seg, e, d; int create(); int copia(int pos); int update(int pos, int ini, int fim, int id); int query(int pos, int ini, int fim, int p, int q); void init(int N, int A[], int B[]) { n = N; create(); bank[0] = create(); for(int i = 0; i < n; i++) v[i + 1] = make_pair(A[i], B[i]); sort(v + 1, v + 1 + n); for(int i = 1; i <= n; i++) bank[i] = update(bank[i - 1], 1, n, v[i].second); } int can(int M, int K[]) { m = M; for(int i = 0; i < m; i++) k[i + 1] = K[i]; sort(k + 1, k + 1 + m); stack<pair<int, pair<int, int> > > pilha; pilha.push(make_pair(MAXN + 10, make_pair(0, 0))); int j = 0; for(int i = 1; i <= m; i++){ while(j <= n && v[j].first <= k[i]) j++; j--; if(j <= 0) return 0; while(k[i] > pilha.top().first) pilha.pop(); int sum = query(bank[j], 1, n, k[i], k[i]) - query(bank[pilha.top().second.first], 1, n, k[i], k[i]); int hmin = k[i] + 1; int hmax = k[i]; while(!pilha.empty()){ if(sum >= k[i]) break; int it = pilha.top().second.first; hmax = pilha.top().first; int diff = query(bank[j], 1, n, hmin, hmax) - query(bank[it], 1, n, hmin, hmax); if(diff + sum >= k[i]){ int ini = hmin, fim = hmax; while(ini != fim){ int mid = (ini + fim) >> 1; diff = query(bank[j], 1, n, hmin, mid) - query(bank[it], 1, n, hmin, mid); if(sum + diff >= k[i]) fim = mid; else ini = mid + 1; } hmax = ini; diff = query(bank[j], 1, n, hmin, hmax) - query(bank[it], 1, n, hmin, hmax); sum += diff; break; } else sum += diff + pilha.top().second.second, hmin = hmax + 1, pilha.pop(); } if(sum < k[i]) return 0; pilha.push(make_pair(hmax, make_pair(j, sum - k[i]))); } return 1; } int create(){ seg.push_back(0); e.push_back(0); d.push_back(0); return seg.size() - 1; } int copia(int pos){ seg.push_back(seg[pos]); e.push_back(e[pos]); d.push_back(d[pos]); return seg.size() - 1; } int update(int pos, int ini, int fim, int id){ if(ini > id || fim < id) return pos; int newNode = copia(pos); if(ini == fim){ seg[newNode]++; return newNode; } int mid = (ini + fim) >> 1; int aux = update(e[pos], ini, mid, id); e[newNode] = aux; aux = update(d[pos], mid + 1, fim, id); d[newNode] = aux; seg[newNode] = seg[e[newNode]] + seg[d[newNode]]; return newNode; } int query(int pos, int ini, int fim, int p, int q){ if(ini > q || fim < p) return 0; if(ini >= p && fim <= q) return seg[pos]; int mid = (ini + fim) >> 1; return query(e[pos], ini, mid, p, q) + query(d[pos], mid + 1, fim, p, q); } int main() { int N; scanf("%d", &N); int *A = (int*)malloc(sizeof(int)*(unsigned int)N); int *B = (int*)malloc(sizeof(int)*(unsigned int)N); for (int i = 0; i < N; ++i) { scanf("%d %d", &A[i], &B[i]); } init(N, A, B); int Q; scanf("%d", &Q); for (int i = 0; i < Q; ++i) { int M; scanf("%d", &M); int *K = (int*)malloc(sizeof(int)*(unsigned int)M); for (int j = 0; j < M; ++j) { scanf("%d", &K[j]); } printf("%d\n", can(M, K)); } return 0; }

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

teams.cpp: In function 'int create()':
teams.cpp:94:20: warning: conversion from 'std::vector<int>::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
   94 |  return seg.size() - 1;
      |         ~~~~~~~~~~~^~~
teams.cpp: In function 'int copia(int)':
teams.cpp:101:20: warning: conversion from 'std::vector<int>::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
  101 |  return seg.size() - 1;
      |         ~~~~~~~~~~~^~~
teams.cpp: In function 'int main()':
teams.cpp:129:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  129 |     scanf("%d", &N);
      |     ~~~~~^~~~~~~~~~
teams.cpp:133:11: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  133 |      scanf("%d %d", &A[i], &B[i]);
      |      ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
teams.cpp:137:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  137 |     scanf("%d", &Q);
      |     ~~~~~^~~~~~~~~~
teams.cpp:140:11: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  140 |      scanf("%d", &M);
      |      ~~~~~^~~~~~~~~~
teams.cpp:143:12: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  143 |       scanf("%d", &K[j]);
      |       ~~~~~^~~~~~~~~~~~~
/tmp/ccw87JCS.o: In function `main':
grader.c:(.text.startup+0x0): multiple definition of `main'
/tmp/ccg4FtKC.o:teams.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status