제출 #106438

#제출 시각아이디문제언어결과실행 시간메모리
106438figter001팀들 (IOI15_teams)C++17
0 / 100
1384 ms193112 KiB
#include "teams.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef unsigned long long ull; const int nax = 5e5+50; struct node{ int val,l,r; node(){ l = r = -1; val = 0; } }; vector<node> seg,tmp; int idx[nax],n,cnt,k,l,r; vector<pair<int,int>> p; void build(int n,int s , int e){ if(s == e){ seg[n].val = 0; return; } seg[n].l = cnt++; seg[n].r = cnt++; build(seg[n].l,s,(s+e)/2); build(seg[n].r,(s+e)/2+1,e); } int update(int n , int s , int e,int at){ if(s > at || e < at) return n; int newId = cnt++; seg[newId].val = seg[n].val; if(s == e){ seg[newId].val++; return newId; } seg[newId].l = update(seg[n].l,s,(s+e)/2,at); seg[newId].r = update(seg[n].r,(s+e)/2+1,e,at); seg[newId].val = seg[seg[newId].l].val + seg[seg[newId].r].val; return newId; } /*void get(int n,int s,int e){ assert(n != -1); if(l > r || s > r || e < l) return; if(s == e){ k -= min(k,seg[n].val); return; } int le = seg[n].l; int ri = seg[n].r; if(s >= l && e <= r){ if(seg[le].val <= k){ k -= seg[le].val; get(ri,(s+e)/2+1,e); }else{ get(le,s,(s+e)/2); } }else{ get(le,s,(s+e)/2); get(ri,(s+e)/2+1,e); } }*/ int get(int n,int s,int e){ if(s > r || e < l || l > r) return 0; if(s >= l && e <= r) return seg[n].val; int le = seg[n].l; int ri = seg[n].r; return get(le,s,(s+e)/2) + get(ri,(s+e)/2+1,e); } void init(int N, int A[], int B[]) { memset(idx,-1,sizeof(idx)); n = N; seg.resize(30*n); for(int i=0;i<n;i++){ p.push_back({A[i],B[i]}); assert(B[i] <= N); } cnt = 1; int lst = cnt; build(cnt++,1,n); sort(p.begin(),p.end()); for(int i=0;i<n;i++){ int a = p[i].first; int b = p[i].second; idx[a] = cnt; update(lst,1,n,b); lst = idx[a]; } } int can(int M, int K[]) { sort(K,K+M); int lst = -1; int add = 0; for(int i=0;i<M;i++){ int st = upper_bound(p.begin(),p.end(),make_pair(K[i],(int)1e9)) - p.begin(); assert(st <= p.size()); if(st == 0) return 0; st--; st = p[st].first; st = idx[st]; add += K[i]; l = K[i]; r = n; lst = st; // cout << add << ' '; // cout << l << ' ' << r << ' ' << add << ' ' << k << endl; // cout << add << ' ' << k << ' '; int have = get(st,1,n); // cout << have << endl; // cout << k << endl; if(add > have) return 0; if(i + 1 < M){ l = K[i]; r = K[i+1] - 1; int here = get(st,1,n); add -= min(here,K[i]); } } return 1; }

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

teams.cpp: In function 'void build(int, int, int)':
teams.cpp:24:31: warning: declaration of 'n' shadows a global declaration [-Wshadow]
 void build(int n,int s , int e){
                               ^
teams.cpp:21:14: note: shadowed declaration is here
 int idx[nax],n,cnt,k,l,r;
              ^
teams.cpp: In function 'int update(int, int, int, int)':
teams.cpp:35:40: warning: declaration of 'n' shadows a global declaration [-Wshadow]
 int update(int n , int s , int e,int at){
                                        ^
teams.cpp:21:14: note: shadowed declaration is here
 int idx[nax],n,cnt,k,l,r;
              ^
teams.cpp: In function 'int get(int, int, int)':
teams.cpp:73:26: warning: declaration of 'n' shadows a global declaration [-Wshadow]
 int get(int n,int s,int e){
                          ^
teams.cpp:21:14: note: shadowed declaration is here
 int idx[nax],n,cnt,k,l,r;
              ^
teams.cpp: In function 'int can(int, int*)':
teams.cpp:109:68: warning: conversion to 'int' from '__gnu_cxx::__normal_iterator<std::pair<int, int>*, std::vector<std::pair<int, int> > >::difference_type {aka long int}' may alter its value [-Wconversion]
   int st = upper_bound(p.begin(),p.end(),make_pair(K[i],(int)1e9)) - p.begin();
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
In file included from /usr/include/c++/7/cassert:44:0,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:33,
                 from teams.cpp:2:
teams.cpp:110:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   assert(st <= p.size());
          ~~~^~~~~~~~~~~
teams.cpp:106:6: warning: variable 'lst' set but not used [-Wunused-but-set-variable]
  int lst = -1;
      ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...