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