Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma comment(linker, "/STACK:65777216")
- #include <iostream>
- #include <iomanip>
- #include <cstdlib>
- #include <ctime>
- #include <cstdio>
- #include <algorithm>
- #include <cmath>
- #include <vector>
- #include <set>
- #include <stack>
- #include <map>
- #include <queue>
- #include <string>
- #include <memory.h>
- #include <iterator>
- #define mem(A,X) memset(A,X,sizeof(A))
- #define memo(A) memset(A,0,sizeof(A))
- #define forn(I,B) for (int I=1;I<=(B);I++)
- #define forg(H,V) for (int H=first[V];h;h=next[H])
- #define rep(I,B) for (int I=0;I<(B);I++)
- #define labs(X) (((X)>0)?(X):(-(X)))
- #define ropen(X) freopen(X,"r",stdin)
- #define wopen(X) freopen(X,"w",stdout)
- #define pb push_back
- #define mp make_pair
- #define all(X) (X).begin(),(X).end()
- using namespace std;
- typedef pair <int,int> pii;
- typedef pair <long long,long long> pll;
- typedef double ld;
- typedef long long ll;
- typedef vector<int> vi;
- const int N=1111;
- const int INF=111111111;
- const double eps=1e-9;
- const double pi=3.14159265358979;
- struct event{
- int x,y1,y2,type;
- bool operator < (const event & q) const{
- return x<q.x;
- }
- } t[N+N];
- int n,c,curs,co;
- ll ans;
- vector <pii> a;
- vector<pii>::iterator it;
- int main(){
- // ropen("input.txt");
- scanf("%d",&n);
- forn(i,n){
- int x1,y1,x2,y2;
- scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
- t[++c]=(event){x1,y2,y1,1};
- t[++c]=(event){x2,y2,y1,-1};
- }
- sort(t+1,t+c+1);
- forn(i,c){
- ans+=(t[i].x-t[i-1].x)*1ll*curs;
- if (t[i].type==-1){
- for (it=a.begin();it!=a.end();it++)
- if (it->first==t[i].y1 && it->second==1){
- a.erase(it);
- break;
- }
- for (it=a.begin();it!=a.end();it++)
- if (it->first==t[i].y2 && it->second==-1){
- a.erase(it);
- break;
- }
- } else {
- if (a.size() && a.back().first>=t[i].y1){
- for (it=a.begin();it!=a.end();it++)
- if (it->first>=t[i].y1){
- a.insert(it,mp(t[i].y1,1));
- break;
- }
- } else a.pb(mp(t[i].y1,1));
- if (a.size() && a.back().first>=t[i].y2){
- for (it=a.begin();it!=a.end();it++)
- if (it->first>=t[i].y2){
- a.insert(it,mp(t[i].y2,-1));
- break;
- }
- } else a.pb(mp(t[i].y2,-1));
- }
- curs=co=0;
- rep(j,a.size()){
- if (co && j) curs+=a[j].first-a[j-1].first;
- co+=a[j].second;
- }
- }
- printf("%I64d\n",ans);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment