제출 #952208

#제출 시각아이디문제언어결과실행 시간메모리
952208nghiaaa팀들 (IOI15_teams)C++17
0 / 100
1996 ms505788 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define db double #define ii pair<int,int> #define f first #define s second #define mp make_pair #define mt make_tuple #define pb push_back #define all(v) v.begin(),v.end() #define BIT(i) ((ll)1<<(i)) #define endl "\n" #define debug(x) for (auto p: x) cout<<p<<' ';cout<<endl #define forw(i,j,z) for(int i=(int)j;i<=(int)z;i++) #define forw2(i,j,z,k) for(int i=(int)j;i<=(int)z;i+=k) #define ford(i,j,z) for (int i=(int)j;i>=(int)z;i--) #define ford2(i,j,z,k) for (int i=(int)j;i>=(int)z;i-=k) #define sz(a) (int)a.size() #define len(a) (int)a.length() const ll inf=(ll)1<<60; const int N=5e5; const int Q=2e5; int n; vector<int> DS[N+1]; struct IT_tap{ IT_tap *l= nullptr; IT_tap *r= nullptr; vector<int> tap; IT_tap():l(nullptr),r(nullptr){} IT_tap(IT_tap *L, IT_tap *R):l(L),r(R){} IT_tap(IT_tap *L, IT_tap *R,vector<int> &u):l(L),r(R),tap(u){} }; IT_tap * tree_tap=new IT_tap(); struct IT{ IT *l= nullptr; IT *r= nullptr; int use=0,preOrder=0; IT():l(nullptr),r(nullptr){} IT(IT *L, IT *R):l(L),r(R){} }; IT *version[Q+10]; IT *build(int l = 1,int r = n, IT_tap *tree = tree_tap) { if (l==r){ sort(all(DS[l])); tree->tap = DS[l]; return new IT(nullptr,nullptr); } int mid=(l+r)>>1; tree->l=new IT_tap; tree->r=new IT_tap; IT * tmp= new IT(build(l,mid,tree->l),build(mid+1,r,tree->r)); tree->tap.assign(sz(tree->l->tap)+sz(tree->r->tap),0); merge(all(tree->l->tap),all(tree->r->tap),begin(tree->tap)); return tmp; } void init(int _n,int A[],int B[]) { n=_n; forw(i,0,n-1){ DS[B[i]].push_back(A[i]); } version[0]=build(); } IT *get(IT *tree,int k,int &left,int lastOfUs = 0,int l = 1,int r = n, IT_tap *arr = tree_tap) { if (r < k||left == 0) return tree; int i = upper_bound(all(arr->tap),k)-begin(arr->tap); IT *newTree = new IT; *newTree = *tree; int mid=(l+r)>>1; if (lastOfUs > 0) newTree->use = upper_bound(all(arr->tap),lastOfUs)-begin(arr->tap); if (l>=k&&i - newTree->use <= left) { left -= (i - newTree-> use); newTree->use = i ; newTree->preOrder = k; return newTree; } else if (l==r){ newTree->use = left; left = 0; return newTree; } int preOrder= (!lastOfUs)?newTree->preOrder:lastOfUs; IT * __ = get(tree->l,k,left,preOrder,l,mid,arr->l); newTree->l = __; if (left) { __ = get(tree->r,k,left,preOrder,mid+1,r,arr->r); newTree->r = __; } newTree->preOrder = 0; newTree->use = newTree->l->use + newTree->r->use; return newTree; } int can(int m,int query[]) { sort(query,query+m); forw(i,0,m-1){ int k=query[i]; IT * _=get(version[i],query[i],k); version[i+1]=_; if (k>0) return 0; } return 1; }

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

teams.cpp: In function 'IT* get(IT*, int, int&, int, int, int, IT_tap*)':
teams.cpp:69:41: warning: conversion from '__gnu_cxx::__normal_iterator<int*, std::vector<int> >::difference_type' {aka 'long int'} to 'int' may change value [-Wconversion]
   69 |     int i = upper_bound(all(arr->tap),k)-begin(arr->tap);
      |             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~
teams.cpp:72:73: warning: conversion from '__gnu_cxx::__normal_iterator<int*, std::vector<int> >::difference_type' {aka 'long int'} to 'int' may change value [-Wconversion]
   72 |     if (lastOfUs > 0) newTree->use = upper_bound(all(arr->tap),lastOfUs)-begin(arr->tap);
      |                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...