Submission #920460

#TimeUsernameProblemLanguageResultExecution timeMemory
920460NotLinuxMeteors (POI11_met)C++17
74 / 100
699 ms65536 KiB
#pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") #include <bits/stdc++.h> using namespace std; #define int long long const int N = 6e5 + 10; struct FENWICK{ int fen[N]; int sz; inline void init(int x){ sz = x+10; memset(fen,0,sizeof(fen)); } inline void update(int p , int x) { while(p < sz){ fen[p] += x; p += p & (-p); //cout << "update:" << p << " " << sz << endl; } } inline int query(int x){ int ret = 0; while(x != 0){ ret += fen[x]; x -= x & (-x); //cout <<"query:"<< x << endl; } return ret; } inline void rangeupdate(int l , int r,int x){ update(l,x); update(r+1,-x); } }; void solve(){ int n,m;cin >> n >> m; vector < int > devlet[n+1]; for(int i = 1;i<=m;i++){ int x;cin >> x; devlet[x].push_back(i); } int need[n+5]; for(int i = 1;i<=n;i++){ cin >> need[i]; } int q;cin >> q; vector < array < int , 3 > > query(q+5); for(int i = 1;i<=q;i++){ cin >> query[i][0] >> query[i][1] >> query[i][2]; } vector < array < int , 3 > > paralel[q+5],nparalel[q+5]; for(int i = 1;i<=n;i++){ paralel[(1+q+1)/2].push_back({i,1,q+1}); } FENWICK fen; for(int i = 0;i<=25;i++){ fen.init(m+10); for(int j = 1;j<=q;j++){ if(query[j][0] <= query[j][1]){ fen.rangeupdate(query[j][0],query[j][1],query[j][2]); } else{ fen.rangeupdate(1,query[j][1],query[j][2]); fen.rangeupdate(query[j][0],m,query[j][2]); } for(auto itr : paralel[j]){ if(itr[1] == itr[2]){ nparalel[j].push_back(itr); continue; } int cur = 0; for(auto itr1 : devlet[itr[0]]){ cur += fen.query(itr1); } if(cur >= need[itr[0]]){//r = mid; int mid = (itr[1] + j)/2; nparalel[mid].push_back({itr[0],itr[1],j}); } else {//l = mid int mid = (j+1 + itr[2])/2; nparalel[mid].push_back({itr[0],j+1,itr[2]}); } } } for(int j = 1;j<=q+1;j++){ paralel[j].swap(nparalel[j]); nparalel[j].clear(); } } int ans[n+5]; memset(ans , -1 , sizeof(ans)); for(int j = 1;j<=q;j++){ for(auto itr : paralel[j]){ ans[itr[0]] = j; } } for(int i = 1;i<=n;i++){ if(ans[i] == -1)cout << "NIE" << '\n'; else cout << ans[i] << '\n'; } } signed main(){ ios_base::sync_with_stdio(0);cin.tie(0); int testcase = 1;//cin >> testcase; while(testcase--)solve(); }
#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...