답안 #48774

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
48774 2018-05-18T17:30:44 Z Pajaraja 운세 보기 2 (JOI14_fortune_telling2) C++17
35 / 100
1314 ms 128844 KB
#include <bits/stdc++.h>
using namespace std;
map<int,int> m;
vector<int> zh,aq[400014];
int a[2][200007],t[200007],seg[1600056],bit[4000014],inv[200007],lf[200007];
void upd(int l,int r,int v,int val,int ind)
{
	if(l==r) {seg[ind]=val; return;}
	int s=(l+r)/2;
	if(s>=v) upd(l,s,v,val,2*ind);
	else upd(s+1,r,v,val,2*ind+1);
	seg[ind]=max(seg[2*ind],seg[2*ind+1]);
}
int nmax(int l,int r,int lt,int rt,int ind)
{
	if(l>r) return 0;
	if(l>=lt  && r<=rt) return seg[ind];
	if(r<lt || l>rt) return 0;
	int s=(l+r)/2;
	return max(nmax(l,s,lt,rt,2*ind),nmax(s+1,r,lt,rt,2*ind+1));
}
void updf(int ind) {for(int i=ind;i<=zh.size();i+=(i&-i)) bit[i]++;}
int fval(int ind) 
{
	int sol=0;
	for(int i=ind;i;i-=(i&-i)) sol+=bit[i];
	return sol;
}
int main()
{
	int n,k;
	long long sol=0;
	scanf("%d%d",&n,&k);
	for(int i=0;i<n;i++) {scanf("%d%d",&a[0][i],&a[1][i]); zh.push_back(a[0][i]); zh.push_back(a[1][i]);}
	for(int i=1;i<=k;i++) {scanf("%d",&t[i]); zh.push_back(t[i]);}
	sort(zh.begin(),zh.end());
	int sz=zh.size();
	for(int i=0;i<zh.size();i++) m[zh[i]]=i;
	for(int i=1;i<=k;i++) upd(1,sz,m[t[i]],i,1);
	for(int i=0;i<n;i++) lf[i]=nmax(1,sz,m[min(a[0][i],a[1][i])],m[max(a[0][i],a[1][i])]-1,1);
	for(int i=0;i<n;i++) aq[lf[i]].push_back(i);
	for(int i=k;i>=1;i--)
	{
		updf(m[t[i]]+1);
		for(int j=0;j<aq[i].size();j++)
		{
			int b=min(a[0][aq[i][j]],a[1][aq[i][j]]),c=max(a[0][aq[i][j]],a[1][aq[i][j]]);
			if((fval(sz)-fval(m[c]))%2==0) sol+=c;
			else sol+=b; 
		}
	}
	for(int j=0;j<aq[0].size();j++)
	{
		int b=a[0][aq[0][j]],c=a[1][aq[0][j]];
		if((fval(sz)-fval(m[c]))%2==0) sol+=b;
		else sol+=c;
	}
	printf("%lld",sol);
}

Compilation message

fortune_telling2.cpp: In function 'void updf(int)':
fortune_telling2.cpp:22:36: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 void updf(int ind) {for(int i=ind;i<=zh.size();i+=(i&-i)) bit[i]++;}
                                   ~^~~~~~~~~~~
fortune_telling2.cpp: In function 'int main()':
fortune_telling2.cpp:38:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<zh.size();i++) m[zh[i]]=i;
              ~^~~~~~~~~~
fortune_telling2.cpp:45:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int j=0;j<aq[i].size();j++)
               ~^~~~~~~~~~~~~
fortune_telling2.cpp:52:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int j=0;j<aq[0].size();j++)
              ~^~~~~~~~~~~~~
fortune_telling2.cpp:33:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d",&n,&k);
  ~~~~~^~~~~~~~~~~~~~
fortune_telling2.cpp:34:29: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(int i=0;i<n;i++) {scanf("%d%d",&a[0][i],&a[1][i]); zh.push_back(a[0][i]); zh.push_back(a[1][i]);}
                        ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
fortune_telling2.cpp:35:30: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(int i=1;i<=k;i++) {scanf("%d",&t[i]); zh.push_back(t[i]);}
                         ~~~~~^~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 9848 KB Output is correct
2 Correct 11 ms 10216 KB Output is correct
3 Correct 11 ms 10216 KB Output is correct
4 Correct 12 ms 10392 KB Output is correct
5 Correct 13 ms 10424 KB Output is correct
6 Correct 16 ms 10424 KB Output is correct
7 Correct 14 ms 10424 KB Output is correct
8 Correct 15 ms 10424 KB Output is correct
9 Correct 12 ms 10424 KB Output is correct
10 Correct 12 ms 10560 KB Output is correct
11 Correct 12 ms 10560 KB Output is correct
12 Correct 11 ms 10660 KB Output is correct
13 Correct 13 ms 10660 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 70 ms 12800 KB Output is correct
2 Correct 122 ms 15280 KB Output is correct
3 Correct 196 ms 18704 KB Output is correct
4 Correct 305 ms 21584 KB Output is correct
5 Correct 301 ms 22780 KB Output is correct
6 Correct 293 ms 23816 KB Output is correct
7 Correct 288 ms 25236 KB Output is correct
8 Correct 290 ms 26320 KB Output is correct
9 Correct 195 ms 26320 KB Output is correct
10 Correct 166 ms 26320 KB Output is correct
11 Correct 146 ms 26320 KB Output is correct
12 Correct 189 ms 27828 KB Output is correct
13 Correct 168 ms 27828 KB Output is correct
14 Correct 219 ms 29492 KB Output is correct
15 Correct 192 ms 30136 KB Output is correct
16 Correct 243 ms 32760 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 575 ms 40136 KB Output is correct
2 Correct 864 ms 50392 KB Output is correct
3 Correct 1168 ms 60420 KB Output is correct
4 Runtime error 1314 ms 128844 KB Execution killed with signal 11 (could be triggered by violating memory limits)
5 Halted 0 ms 0 KB -