Submission #920472

#TimeUsernameProblemLanguageResultExecution timeMemory
920472NotLinuxMeteors (POI11_met)C++17
74 / 100
928 ms55836 KiB
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") #include <bits/stdc++.h> using namespace std; #define int long long const int N = 3e5 + 100; struct FENWICK{ int fen[N]; int sz; inline void init(int x){ sz = x+3; 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); 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); } FENWICK fen; for(int i = 0;i<=19;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+1,query[j][2]); } for(auto itr : paralel[j]){ if(l[itr] == r[itr]){ nparalel[j].push_back(itr); continue; } int 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...