Editorial for 串一串脆薯4
記住 只 在沒有思路時使用題解,不要複製貼上代碼。請尊重題目和題解的作者。
在真正親自解開題目前提交官方題解的代碼是可以封禁的罪行。
在真正親自解開題目前提交官方題解的代碼是可以封禁的罪行。
作者:
僅供參考
#include <bits/stdc++.h>
#define speed ios_base::sync_with_stdio(0); cin.tie(0)
#define all(x) (x).begin(),(x).end()
#define F first
#define S second
// #pragma GCC optimize("O3,unroll-loops")
// #pragma GCC target("avx,avx2")
// #pragma GCC target("popcnt")
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef long double ldb;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
const ll MAX=2e5+10,P=1e9+7;
const ll INF=0x3f3f3f3f,oo=0x3f3f3f3f3f3f3f3f;
const ldb eps=1e-9;
const ldb PI=acos(-1.0);
const int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
template<typename T>
using vvector = vector<vector<T>>;
struct query {
ll id,d,r,c;
};
int main(int argc,char* argt[]) {
speed;
// string fin=argt[1];
// freopen((fin+".in").c_str(),"r+",stdin);
// freopen((fin+".out").c_str(),"w+",stdout);
int n,q;
cin>>n>>q;
int sq=sqrt(n)+eps;
vector<query> E;
vector<ll> a(n+1);
for (int i=0;i<q;i++) {
ll l,r,k,c;
cin>>l>>r>>k>>c;
if (k<=sq) {
int rem=l%k;
int cnt=(r-l)/k+1;
E.push_back({l,k,rem,c});
E.push_back({l+cnt*k,k,rem,-c});
} else {
for (int j=l;j<=r;j+=k) a[j]+=c;
}
}
sort(all(E),[&](query a,query b) {
return a.id<b.id;
});
// cerr<<"fjdnbgkjfdgdsf\n"<<flush;
vvector<ll> add(sq+1,vector<ll>(sq));
int eid=0;
for (int i=1;i<=n;i++) {
while (eid<E.size() and E[eid].id==i) {
// cout<<E[eid].id<<" "<<E[eid].d<<" "<<E[eid].r<<" "<<E[eid].c<<"\n";
add[E[eid].d][E[eid].r]+=E[eid].c;
eid++;
}
a[i]+=add[1][0];
for (int j=2;j<=sq;j++) {
a[i]+=add[j][i%j];
}
}
for (int i=1;i<=n;i++) {
cout<<a[i]<<" ";
}
cout<<"\n";
return 0;
}
留言