제출 #270537

#제출 시각아이디문제언어결과실행 시간메모리
270537egekabasPermutation Recovery (info1cup17_permutation)C++14
25 / 100
2 ms2048 KiB
#include <bits/stdc++.h> #define all(x) (x).begin(), (x).end() #define ff first #define ss second #define pb push_back #define mp make_pair using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair<ll, ll> pll; typedef pair<ull, ull> pull; typedef pair<int, int> pii; typedef pair<ld, ld> pld; ll sq = 300; ll mod = 1e16+7; ll n; ll a[70009]; vector<pll> v[70009]; ll tot[70009]; void add(ll seg, ll idx, ll num){ tot[seg] = (tot[seg]+a[num])%mod; if(idx == -1) v[seg].insert(v[seg].begin()+idx+1, {a[num], num}); else v[seg].insert(v[seg].begin()+idx+1, {(seg[v][idx].ff+a[num])%mod, num}); for(int i = idx+2; i < v[seg].size(); ++i){ v[seg][i].ff = (a[v[seg][i].ss]+v[seg][i-1].ff)%mod; } } void restruct(){ vector<ll> tmp; for(ll i = 0; v[i].size(); ++i){ for(auto u : v[i]) tmp.pb(u.ss); v[i].clear(); tot[i] = 0; } for(ll i = 0; i < tmp.size(); ++i) add(i/sq, v[i/sq].size()-1, tmp[i]); } ll ans[70009]; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); cin >> n; for(ll i = 1; i <= n; ++i){ string s; cin >> s; for(auto u : s){ a[i] = a[i]*10%mod; a[i] += u-'0'; if(a[i] >= mod) a[i]-=mod; } } for(ll i = n; i >= 1; --i) a[i] = (a[i]-a[i-1]+mod)%mod; for(ll i = 1; i <= n; ++i){ ll lookfor = a[i]-1; for(ll j = 0;; ++j){ ll idx = lower_bound(all(v[j]), mp(lookfor, 0LL))-v[j].begin(); if(a[i] == 1 || (idx != v[j].size()&&v[j][idx].ff==lookfor)){ if(a[i] == 1) idx = -1; add(j, idx, i); if(v[j].size() == 2*sq) restruct(); break; } lookfor = (lookfor-tot[j]+mod)%mod; if(v[j].empty()) break; } } ll cur = 1; for(ll i = 0; v[i].size(); ++i) for(auto u : v[i]) ans[u.ss] = cur++; for(ll i = 1; i <= n; ++i) cout << ans[i] << ' '; }

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

permutation.cpp: In function 'void add(ll, ll, ll)':
permutation.cpp:27:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |     for(int i = idx+2; i < v[seg].size(); ++i){
      |                        ~~^~~~~~~~~~~~~~~
permutation.cpp: In function 'void restruct()':
permutation.cpp:39:21: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   39 |     for(ll i = 0; i < tmp.size(); ++i)
      |                   ~~^~~~~~~~~~~~
permutation.cpp: In function 'int main()':
permutation.cpp:68:34: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |             if(a[i] == 1 || (idx != v[j].size()&&v[j][idx].ff==lookfor)){
      |                              ~~~~^~~~~~~~~~~~~~
permutation.cpp:71:32: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} and 'll' {aka 'long long int'} [-Wsign-compare]
   71 |                 if(v[j].size() == 2*sq)
      |                    ~~~~~~~~~~~~^~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...