Submission #920481

#TimeUsernameProblemLanguageResultExecution timeMemory
920481NotLinuxMeteors (POI11_met)C++17
74 / 100
885 ms37092 KiB
#pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") #include <bits/stdc++.h> using namespace std; #define lng long long const int gh = 21; struct FENWICK{ vector < lng > fen; int sz; FENWICK(int x){ sz = x+3; fen.assign(sz,0); } inline void update(int p , int x) { while(p <= sz){ fen[p] += x; p += p & (-p); //cout << "update:" << p << " " << sz << endl; } } inline lng query(int x){ lng 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); if(r != sz)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+1]; for(int i = 1;i<=n;i++){ cin >> need[i]; } int q;cin >> q; vector < array < int , 3 > > query(q+1); for(int i = 1;i<=q;i++){ cin >> query[i][0] >> query[i][1] >> query[i][2]; } vector < int > paralel[q+2],nparalel[q+2]; int l[n+1] , r[n+1]; for(int i = 1;i<=n;i++){ l[i] = 1; r[i] = q+1; paralel[(l[i] + r[i])/2].push_back(i); } for(int i = 0;i<=gh;i++){ FENWICK fen(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+1,query[j][2]); } for(auto itr : paralel[j]){ if(l[itr] == r[itr]){ nparalel[j].push_back(itr); continue; } lng cur = 0; for(auto itr1 : devlet[itr]){ cur += fen.query(itr1); } int mid = (l[itr] + r[itr])/2; if(cur >= need[itr]){//r = mid; r[itr] = mid; } else {//l = mid l[itr] = mid+1; } nparalel[(l[itr] + r[itr]) / 2].push_back(itr); } } for(int j = 1;j<=q;j++){ paralel[j].swap(nparalel[j]); nparalel[j].clear(); } } int ans[n+1]; memset(ans , -1 , sizeof(ans)); for(int j = 1;j<=q;j++){ for(auto itr : paralel[j]){ ans[itr] = 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...