diff --git a/src/7/13/U232856.cpp b/src/7/13/U232856.cpp new file mode 100644 index 0000000..57792b9 --- /dev/null +++ b/src/7/13/U232856.cpp @@ -0,0 +1,50 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using ll = int64_t; +const ll maxn = 1e5+5; +ll h,w,q1,q2; +std::set ys; +std::vector> vq; +std::map r2by; + + +int main(){ + vq.resize(maxn); + + std::iostream::sync_with_stdio(false),std::cin.tie(nullptr),std::cout.tie(nullptr); + std::cin>>h>>w>>q1>>q2; + for(ll i=1;i<=q1;i++){ + ll rx,ry,cx,cy,x; + std::cin>>rx>>ry>>cx>>cy>>x; + ys.insert(ry);ys.insert(cy); + vq[i]={rx,ry,cx,cy,x}; + } + + for(ll i:ys){ + static ll idx=0; + idx++; + r2by.emplace(i,idx); + } + + for(ll i=1;i<=q1;i++){ + auto[rx,ry,cx,cy,x]=vq[i]; + ll bry = r2by.find(ry)->second; + ll bcy = r2by.find(cy)->second; + vq[i]={rx,bry,cx,bcy,x}; + } + std::sort(vq.data()+1,vq.data()+1+q1); + + for(ll i=1;i<=q2;i++){ + ll r1,r2,c1,c2; + std::cin>>r1>>r2>>c1>>c2; + + } +} \ No newline at end of file diff --git a/src/7/13/U232856_gpt.cpp b/src/7/13/U232856_gpt.cpp new file mode 100644 index 0000000..a43d870 --- /dev/null +++ b/src/7/13/U232856_gpt.cpp @@ -0,0 +1,102 @@ +#include +using namespace std; +#define ll long long +const int MOD=2021; + +int main() { + ios::sync_with_stdio(false); cin.tie(0); + int h, w, q1, q2; + cin >> h >> w >> q1 >> q2; + + vector row_all, col_all; + struct Qadd{int r1,r2,c1,c2,x;}; + struct QQry{int r1,r2,c1,c2;}; + vector adds; vector qrys; + + for(int i=0;i>r1>>r2>>c1>>c2>>x; + adds.push_back({r1,r2,c1,c2,x}); + row_all.push_back(r1); row_all.push_back(r2+1); + col_all.push_back(c1); col_all.push_back(c2+1); + } + for(int i=0;i>r1>>r2>>c1>>c2; + qrys.push_back({r1,r2,c1,c2}); + row_all.push_back(r1); row_all.push_back(r2+1); + col_all.push_back(c1); col_all.push_back(c2+1); + } + + sort(row_all.begin(),row_all.end());row_all.erase(unique(row_all.begin(),row_all.end()),row_all.end()); + sort(col_all.begin(),col_all.end());col_all.erase(unique(col_all.begin(),col_all.end()),col_all.end()); + map row2id, col2id; + for(int i=0;i col_len(col_all.size()); + for(int i=0;i+1 row_len(row_all.size()); + for(int i=0;i+1> diff(nrow); + + + for(auto& op:adds){ + int r1=row2id[op.r1], r2=row2id[op.r2+1]-1; + int c1=col2id[op.c1],c2=col2id[op.c2+1]-1; + for(int r=r1;r<=r2;r++){ + diff[r][c1] = (diff[r][c1]+op.x)%MOD; + diff[r][c2+1] = (diff[r][c2+1]-op.x+MOD)%MOD; + } + } + + + for(auto& qry: qrys){ + int rr1=row2id[qry.r1], rr2=row2id[qry.r2+1]-1; + int cc1=col2id[qry.c1], cc2=col2id[qry.c2+1]-1; + ll sum=0; + for(int r=rr1; r<=rr2; r++){ + + ll val=0; + auto& mp=diff[r]; + + vector keys; + for(auto [k,_]:mp){ + if(k > cc2) break; + keys.push_back(k); + } + if(keys.empty() || keys[0]>cc2) continue; + ll cur=0; + int last = cc1; + for(int i=0;icc1) pos=cc1; + if(keys[i]>cc2) break; + if(i>0)last=keys[i-1]; + + if(keys[i]>=cc1){ + ll len = min(col_all[cc2+1], col_all[keys[i]+1]) - max(col_all[cc1], col_all[keys[i]]); + + } + } + + + vector raw(ncol+2,0); + for(auto[x, v]: mp){ + raw[x] = (raw[x]+v)%MOD; + } + + for(int i=1;i<=ncol;i++) + raw[i] = (raw[i]+raw[i-1])%MOD; + + for(int j=cc1;j<=cc2;j++){ + sum = (sum + raw[j]*col_len[j]%MOD*row_len[r]%MOD)%MOD; + } + } + cout<