update
This commit is contained in:
parent
fa903c96c9
commit
9e696558fb
50
src/7/13/U232856.cpp
Normal file
50
src/7/13/U232856.cpp
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
#include <algorithm>
|
||||||
|
#include <cstdint>
|
||||||
|
#include <iostream>
|
||||||
|
#include <istream>
|
||||||
|
#include <map>
|
||||||
|
#include <set>
|
||||||
|
#include <tuple>
|
||||||
|
#include <type_traits>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
using ll = int64_t;
|
||||||
|
const ll maxn = 1e5+5;
|
||||||
|
ll h,w,q1,q2;
|
||||||
|
std::set<ll> ys;
|
||||||
|
std::vector<std::tuple<ll,ll,ll,ll,ll>> vq;
|
||||||
|
std::map<ll, ll> 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;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
102
src/7/13/U232856_gpt.cpp
Normal file
102
src/7/13/U232856_gpt.cpp
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
#include <bits/stdc++.h>
|
||||||
|
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<int> row_all, col_all;
|
||||||
|
struct Qadd{int r1,r2,c1,c2,x;};
|
||||||
|
struct QQry{int r1,r2,c1,c2;};
|
||||||
|
vector<Qadd> adds; vector<QQry> qrys;
|
||||||
|
|
||||||
|
for(int i=0;i<q1;i++){
|
||||||
|
int r1,r2,c1,c2,x;cin>>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<q2;i++){
|
||||||
|
int r1,r2,c1,c2;cin>>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<int,int> row2id, col2id;
|
||||||
|
for(int i=0;i<row_all.size();i++) row2id[row_all[i]] = i;
|
||||||
|
for(int i=0;i<col_all.size();i++) col2id[col_all[i]] = i;
|
||||||
|
|
||||||
|
vector<ll> col_len(col_all.size());
|
||||||
|
for(int i=0;i+1<col_all.size();i++) col_len[i]=col_all[i+1]-col_all[i];
|
||||||
|
col_len[col_all.size()-1]=1;
|
||||||
|
|
||||||
|
vector<ll> row_len(row_all.size());
|
||||||
|
for(int i=0;i+1<row_all.size();i++) row_len[i]=row_all[i+1]-row_all[i];
|
||||||
|
row_len[row_all.size()-1]=1;
|
||||||
|
|
||||||
|
int nrow = row_all.size(), ncol= col_all.size();
|
||||||
|
|
||||||
|
vector<map<int,ll>> 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<int> 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;i<keys.size();i++){
|
||||||
|
int pos = max(keys[i], cc1);
|
||||||
|
if(i==0 && keys[0]>cc1) 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<ll> 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<<sum<<'\n';
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user